用C#中的Regex替换逗号

本文关键字:替换 Regex 中的 | 更新日期: 2023-09-27 18:26:54

我遇到了一个很简单的问题,我想我想替换字符串中的每个逗号",",除了被数字包围的逗号。示例:

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尝试过,但我真的不能像我想的那样容易地让它工作。匹配我需要的逗号很容易,但问题是我认为我可以这样做:

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

它很酷,但它改变了我的:

hey,world into: he,'norld

如果你能帮我弄清楚,我会很高兴:)

谨致问候,Andrew

用C#中的Regex替换逗号

这使用负向后看(?<!...)和负向前看(?!...)来检查数字的存在。

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

意思是:前面没有数字或后面没有数字。因此,唯一的失败情况是:前面是数字AND,后面是数字。

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

我最初的正则表达式完全错误!因为它是:不带数字AND不带数字,而请求是:不加数字OR不带数字。

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

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

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

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

如果匹配包含不想替换的字符,则应使用否定先行断言负先行断言
这里有一个很好的regex站点。

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

上面的正则表达式将直接替换逗号及其前后的任何空格。

尝试用空字符串替换。

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