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

How can I use regular expressions to insert commas into large integers?

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

我的猜测是,也许,

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

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

Demo 2

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

Demo 3

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


如果您希望 simplify/modify/explore 表达式,regex101.com. If you'd like, you can also watch in this link 的右上面板已对其进行说明,它将如何匹配一些样本输入。


如果您不想触及小数点,您可以使用 (*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