正则表达式删除whitepsace除非它在里面" "

时间:2017-01-09 15:34:01

标签: c# regex

我到处寻找但无法找到答案。我需要一个正则表达式,它删除字符串中的所有空格,但只保留""内的空格。 示例:$F:2 $PX:30 $PY:980 $T: " "$F:A $PX:30B $PY:9K80 $T: " "所以最后应该看起来像$F:2$PX:30$PY:980$T:" "

解释如何阅读你回答的正则表达式是很有价值的。

3 个答案:

答案 0 :(得分:1)

匹配空格不在前面,后面跟引号:

(?<!") (?!")

匹配所有空格:

(?<!")\s+(?!")

注意:这可能不适用于多个空间,正如Dmitry所指出的那样。

答案 1 :(得分:1)

这将匹配触及"但未被它们包围的空白。

" +(?!\")|(?<!\") +"

对于所有空白区域:

"\s+(?!\")|(?<!\")\s+"

您可以在Regex101Rextester

上对其进行测试

答案 2 :(得分:1)

在这种情况下,

The Greatest Regex Trick Ever非常有用:

var str = "$F:2 $PX:30 $PY:980 \"   \"$T:\" \"";
str = Regex.Replace(str, "\"\\s+\"|\\s+", m => { return m.Value.StartsWith("\"") ? m.Value : ""; });
Console.WriteLine(str);

演示:https://dotnetfiddle.net/Q54FlJ