[英]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.