我有一个文本文件,其中包含很多大整数,例如123456789。我想自动在其中插入逗号以使其更具可读性:123,456,789。但是,我的文档中也包含小数,这些应保持不变。是否有将其插入的正则表达式?对于类似问题的答案建议为(?<=\d)(?=(\d\d\d)+(?!\d))
,但这也可以检测十进制数。而且,我无法使用Notepad ++或Overleaf插入逗号。我该用什么替换该正则表达式?
答案 0 :(得分:2)
如果您不想触摸小数,可以使用(*SKIP)(*FAIL)来匹配点和1+数字来使用不属于匹配项的字符。
(在Notepad ++ 7.7.1上测试)
\.\d+(*SKIP)(*FAIL)|\B(?=(?:\d{3})+(?!\d))
在替换中使用逗号,
部分
\.\d+(*SKIP)(*FAIL)
从字面上匹配点和1个以上的数字(匹配时请保持原状)|
或\B
Anchor与\b
不匹配的地方匹配(?=
正向前进,断言右边直接是
(?:\d{3})+
重复1次以上,匹配3位数字(?!\d)
负向查找,断言右侧直接不是数字)
提前关闭答案 1 :(得分:0)
我的猜测是,
(?<=\d)(?=(?:\d{3})+(?!\d|\.))
或
(?!^)(?=(?:\d{3})+(?!\.|\d))
或
\d+\.\d*(*SKIP)(*FAIL)|(?!^)(?=(?:\d{3})+(?!\.|\d))
可能与您要编写的内容很接近,只需将其替换为逗号即可。
如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。