在C#中用Regex替换逗号

时间:2013-08-09 07:44:01

标签: c# .net

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

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 

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

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

它很酷但它改变了我的:

hey,world into: he,\norld

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

此致 安德鲁

4 个答案:

答案 0 :(得分:8)

这使用负面后顾问(?<!...)和否定前瞻(?!...)来检查是否存在数字。

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

表示:前面没有数字或后面没有数字。所以唯一的失败案例是:前面是数字AND后跟数字。

请注意\d[0-9]不同。 ԱԲԳԴԵԶԷԸԹ0123456789\d(以及其他许多人)(Armenian numerals},而0123456789[0-9]

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

答案 1 :(得分:1)

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

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

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

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

答案 2 :(得分:1)

您的匹配包含您不想替换的字符,您应该使用否定前瞻断言否定后瞻断言Here's a good site for regex.

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

上述正则表达式将直接替换逗号和任何空格。

答案 3 :(得分:0)

尝试用空字符串替换。

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