我想用一个以上的&nbps;
代替一个以上的空间,但是如果只用1个,我想将其保留为正常空间。
测试用例:
input | desired output
---------------------------
a test | a test
a test | a test
a test | a test
在这种情况下,我也想保留换行符,以后将用
替换掉,所以我只使用作为正则表达式尝试
到目前为止,我所得到的只是将/ {2,}/g
替换为
,但是我不知道如何使替换匹配模式中{}
找到的计数。有没有办法做到这一点,或者通过一些迭代过程来做会更好?
在这种情况下,我使用的是C#:Regex.Replace(input, @" {2,}", " ")
答案 0 :(得分:1)
您可以使用基于环顾的正则表达式:
(?<= ) | (?= )
并用
C#代码:
Regex.Replace(input, @"(?<= ) | (?= )", " ")
RegEx详细信息:
(?<= )
:匹配前面有另一个空格的一个空格|
:或 (?= )
:匹配一个空格,然后是另一个空格答案 1 :(得分:1)
由于要替换伴随更多空间的每个空间,因此可以使用环顾四周定位每个这样的空间,并用
替换。这是正则表达式,
(?= )|(?<= )
此正则表达式将不匹配单个空格,而仅匹配一个空格后跟一个空格或一个空格的后缀。
演示的内联代码,以防万一一段时间后链接因某种原因消失
string pattern = @" (?= )|(?<= ) ";
string substitution = @" ";
string input = @"a test
a test
a test";
RegexOptions options = RegexOptions.Multiline;
Regex regex = new Regex(pattern, options);
string result = regex.Replace(input, substitution);
Console.WriteLine(result);
打印
a test
a test
a test
答案 2 :(得分:1)
这可能是技术上最有效的方法:
\B | \B
演示:https://regex101.com/r/QnHQoz/1
说明:
\b
匹配单词边界,基本上是单词字符(字母和数字)和非单词字符之间的任何点。\B
是\b
的否定词,表示它与\b
不匹配的所有内容匹配,反之亦然。