繁体   English   中英

在C#中用Regex替换逗号

[英]Replacing a comma with Regex in C#

我遇到了一个非常简单的问题,我想,我想在字符串中替换每个逗号',',除了被数字包围的字符串。 例子:

hey, world -> hey,\nworld
hey  ,  world -> hey,\nworld
they are simple, but now also:
hey,world -> hey,\nworld
hey),world -> hey),\nworld
(1,2) -> (1,2) << no change :P 

我尝试了不同的正则表达式,我无法让它像我想的那样轻松地工作。 匹配我需要的逗号很容易,但问题是我认为我可以这样做:

Regex.Replace(input, @"[^\d]\s*,\s*[^\d]", ",\n");

它工作很酷,但它改变了我:

hey,world into: he,\norld

如果你能帮我解决这个问题,我会很高兴:)

问候,安德鲁

这使用负向lookbehind (?<!...)和负向前瞻(?!...)来检查是否存在数字。

(?<![0-9])\s*,\s*|\s*,\s*(?![0-9])

这意味着:前面没有数字或后面没有数字。 所以唯一的失败案例是:前面有数字AND后跟数字。

请注意\\d[0-9]不同。 ԱԲԳԴԵԶԷԸԹ0123456789\\d (和许多其他人)(他们是亚美尼亚数字 ),而0123456789[0-9]

我原来的正则表达式完全错了! 因为它是:不是前面的数字而不是后跟数字,而请求是:非数字后面或后面没有数字。

您需要使用前瞻只匹配逗号,而不是逗号前后的字符:

(?=[^\d]\s*),(?=\s*[^\d])

添加第二个示例中显示的空格删除:

(?=[^\d]\s*)[ ]*,[ ]*(?=\s*[^\d])

您的匹配包含您不想替换的字符,您应该使用负前瞻断言负后瞻断言
这是一个很好的正则表达式网站。

@"(?<!\d)\s*,\s*(?!\d)"

上面的正则表达式将直接在它之前或之后替换逗号和任何空格。

尝试用空字符串替换。

Regex.Replace(input, @"(?![0-9])\s*,\s*(?![0-9])", "");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM