C# Regex移除whitepsace,除非它位于“内部”&引用;

C# Regex移除whitepsace,除非它位于“内部”&引用;,c#,regex,C#,Regex,我到处找,但找不到答案。我需要一个正则表达式,它删除字符串中的所有空格,但只保留“中的空格。 示例:$F:2$PX:30$PY:980$T:“或$F:A$PX:30B$PY:9K80$T:”因此最后它应该看起来像$F:2$PX:30$PY:980$T:“ 解释如何阅读您所回答的正则表达式是很有价值的。与前面或后面没有引号的空格相匹配: (?<!") (?!") (? 匹配所有空白: (?<!")\s+(?!") (? 注意:正如Dmitry所指出的,这可能不适用于多个空格。这将匹

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


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

与前面或后面没有引号的空格相匹配:

(?<!") (?!")
(?
匹配所有空白:

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

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

这将匹配与
”接触但未被其包围的空格

" +(?!\")|(?<!\") +"
“+(?!\”)|(?在这种情况下非常有用:

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);

演示:

老实说,这不是一个很难解决的问题,只需迭代字符并跟踪双引号的开始和结束,而不是使用正则表达式。您提供的示例很少。除了带引号的空格外,还会出现其他问题吗“
…请展示您已经尝试过的内容,以便更好地理解。这将在引号中的3+个连续空格上失败,例如,
。您是否可以稍微修改它,忽略引号前面的空格,并删除引号后面的空格,我需要找到它以
$T:”
而不仅仅是
$T:“
。希望您理解我的意思say@arianitax,我的答案解决了这个问题,也允许多个spaces@DmitryEgorov谢谢你指出这一点。我把它写进了我的答案中。你能做一点更新吗。
$F:2$PX:30$PY:980$T:“$F:2$PX:30$PY:980$T:”
在这种情况下,正则表达式在结束后不会捕获空格”。你能让它也捕获空格吗?这不是一个错误,所以很多时候字符串都是这样的,就像1ok中的2。问题是这样的:我是如何在第一个
后的第一条注释中写入的$t:““
它忽略了其余部分,它只给了我字符串的一半。因此,你能找到一个解决办法来解决这个问题吗@maksymiukI不明白。在这个例子中,它显示了它正按照你想要的方式工作:检查Rextester链接,我刚刚添加了一个编辑,似乎问题发生在打开前有一个空格的情况下,则它不会将
$t:“
识别为字符串的一部分。@maksymiuk
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);