正则表达式逗号不表达

Posted

技术标签:

【中文标题】正则表达式逗号不表达【英文标题】:Regex commas out of expression 【发布时间】:2013-09-24 17:59:30 【问题描述】:

我正在尝试用正则表达式替换字符串中引号之间的所有逗号。我似乎无法让它以非贪婪的方式匹配它们,所以它不会只是正则表达式整行。我正在尝试的文本和正则表达式如下。使用我正在尝试的正则表达式,它正在拾取每个元素之间的逗号。 EX "remove,comma","nocomma" 产生 "remove,comma" 和 "," 匹配。此外,它正在从“nocomma”、“nocomma”中选择“nocomma”、“nocomma”等匹配项。

我先进行匹配,然后缩小范围以替换逗号。

使用 .NET 4.0

正则表达式之前的文本

"remove,comma","re​​move,comma","nocomma","re​​move,comma","re​​move,all,commas,here,too","also,remove,commas"

正则表达式之前我想要的文本

"removecomma","re​​movecomma","nocomma","re​​movecomma","re​​moveallcommasheretoo","alsoremovecommas"

正则表达式

\".*?(,).*?\"

【问题讨论】:

【参考方案1】:
Regex.Replace(input,@",(?!([^""]*""[^""]*"")*[^""]*$)","");

上面的正则表达式将替换,,前提是它们前面的" 是奇数。这是因为"" 中的, 前面有" 的奇数。

[^"]* 将匹配 0 到许多不是 " 的字符

$ 描述字符串的结尾

(?!) 是负前瞻

【讨论】:

这会删除所有逗号,包括我不想删除的逗号。我已经在上面更新了我希望决赛的样子。 我看到了您添加的解释,但是当我在 myregextester 中运行它时,它会删除所有逗号,包括我需要保留的逗号。 @steventnorris 在 Visual Studio not 测试器中运行它。这在其他测试器中不起作用,因为它会尝试重新转义 " 效果很好。我没有兑现 " 字符的逃逸。现在效果很好,我很欣赏这个解释。巧妙地使用奇数个引号。【参考方案2】:

这个怎么样:-

Regex.Replace(input,@",(?![^""]*""(?:[^""]*""[^""]*"")*[^""]*$)",String.Empty);

或者试试这个:-

string pattern = @"""[^""]*""";
data = Regex.Replace(data, pattern, m => m.Value.Replace(",", ""),
    RegexOptions.IgnorePatternWhitespace);

【讨论】:

我在 myregextester.com 中尝试过此操作,但没有产生任何匹配项。 @steventnorris:- 更新了我的答案。请立即尝试!!1 更接近,但这会删除所有逗号,包括我想要保留的逗号。

以上是关于正则表达式逗号不表达的主要内容,如果未能解决你的问题,请参考以下文章

使用正则表达式批量去除第一个逗号前的内容(含逗号)以及去除最后一个逗号后面的内容

Python 正则表达式,包括逗号和点

php写一个正则表达式 匹配逗号

用正则表达式匹配数字——只有数字和逗号

Javascript split() 正则表达式在 Chrome 中返回不需要的逗号

正则表达式验证小数前后的数字,不包括逗号