如何使用正则表达式将逗号插入到大整数中?
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)
否定前瞻,断言右边的不是数字
)
关闭前瞻
我有一个包含很多大整数的文本文档,例如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)
否定前瞻,断言右边的不是数字
)
关闭前瞻