用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
这使用负向后看(?<!...)
和负向前看(?!...)
来检查数字的存在。
(?<![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])", "");