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

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

H ello W orld ----> Hello World 

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

仅供参考,我正在使用C#正则表达式:之前我做过类似的事情,但对于上述情况,它无法正常工作:

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

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

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

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

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

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


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

尝试使用负向前看。

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

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

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

 Regex pattern = new Regex(@" ( *)"); String newString = pattern.Replace("H ello W orld", "$1"); // newString == "Hello World" 

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

 string s = Regex.Replace("H ello W orld", @"\s\S", x => x.Value[1].ToString()); 

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

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

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

 var input = "H ello W orld "; var res = String.Join("", input.Where((c, i) => (i % 2) == 0)); 

鉴于您的问题的性质,决不是一般解决方案,但在这种特殊情况下,看起来您可以通过移除触摸任一侧的单词字符的空格来逃避:在左侧,例如:

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

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