正则表达式用于删除一个空格

时间:2011-06-29 16:46:27

标签: c# regex

删除一个空格的正则表达式是什么? 例如:

H e l l o  W o r l d  ---->  Hello World

(请注意,Hello World之间还有一个空格。它之间有两个空格开始)

仅供参考,我正在使用C#正则表达式: 以前我做过这样的事情,但对于上述情况它不能正常工作:

Regex pattern = new Regex(@"[ ]{2,}");
pattern.Replace(content, @" ")

7 个答案:

答案 0 :(得分:5)

要从一个或多个空格的所有组中删除一个空格,请使用

pattern = Regex.Replace(content, " ( *)", "$1");

要将 n 空格更改为floor( n / 2)空格,请使用

pattern = Regex.Replace(content, " ( ?)", "$1");

我尝试添加示例,但stackoverflow甚至在内联代码跨度中整合了空白。


解释,按要求:第一个找到一个后跟零个或多个空格的空格,并用零个或多个空格替换它,将长度减少1.第二个找到每个一个或两个空格的组并将其替换为零或者一个空格,一次更换1到0,一次更换2到1,两次更换3到2等。

答案 1 :(得分:2)

尝试使用负向前看。

Regex pattern = new Regex(@"\s(?!\s)");
Console.WriteLine(pattern.Replace(content, ""))

答案 2 :(得分:1)

如果我理解你想为一个或多个连续空格的每次出现删除一个空格。

为此,您需要创建一个正则表达式,该正则表达式匹配每个此类事件,将除一个空格之外的所有空格放入捕获组,然后将每个事件替换为捕获组。因此,如果彼此相邻有2个空格,则它们被找到为一个匹配,第二个空间进入捕获组。因此,在更换后,两个空间减少到一个空间。

Regex pattern = new Regex(@" ( *)");
String newString = pattern.Replace("H e l l o  W o r l d", "$1");
// newString == "Hello World"

答案 3 :(得分:0)

匹配空格后跟非空格并删除这些空格。

Regex.Replace(input, @"(\s)(\S)", @"$2");

它看起来像是一个字符串,每个字符后面都有一个空格。如果是这样,那么你可以通过只检索字符串中的偶数索引字符来获得原始字符串。

var input = "H e l l o   W o r l d ";
var res = String.Join("", input.Where((c, i) => (i % 2) == 0));

答案 4 :(得分:0)

另一种方法是使用匹配评估器来使用两个字符匹配:

string s = Regex.Replace("H e l l o  W o r l d", @"\s\S", x => x.Value[1].ToString());

答案 5 :(得分:0)

考虑到问题的性质,决不是一般解决方案,但在这种特殊情况下,看起来好像你可以通过删除任何一侧触及单词字符的空格来逃避:例如:

Regex.Replace(content, " \b", "");

答案 6 :(得分:-1)

表达式“[\ s] {1}”应该这样做

相关问题