如何使用正则表达式将逗号插入大整数?

时间:2019-09-23 22:25:15

标签: regex regexp-replace

我有一个文本文件,其中包含很多大整数,例如123456789。我想自动在其中插入逗号以使其更具可读性:123,456,789。但是,我的文档中也包含小数,这些应保持不变。是否有将其插入的正则表达式?对于类似问题的答案建议为(?<=\d)(?=(\d\d\d)+(?!\d)),但这也可以检测十进制数。而且,我无法使用Notepad ++或Overleaf插入逗号。我该用什么替换该正则表达式?

2 个答案:

答案 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)负向查找,断言右侧直接不是数字
  • )提前关闭

Regex demo

答案 1 :(得分:0)

我的猜测是,

(?<=\d)(?=(?:\d{3})+(?!\d|\.))

(?!^)(?=(?:\d{3})+(?!\.|\d))

Demo 2

\d+\.\d*(*SKIP)(*FAIL)|(?!^)(?=(?:\d{3})+(?!\.|\d))

Demo 3

可能与您要编写的内容很接近,只需将其替换为逗号即可。


如果您希望简化/修改/探索表达式,请在regex101.com的右上角进行说明。如果愿意,您还可以在this link中查看它如何与某些示例输入匹配。