0

作为可视化的一部分,我想为字符串中的任何数字(连续的数字字符串)添加数千个分隔符。它不需要考虑数字的上下文,例如

1234e+56789 Nokia 3210s cost $123456.7890 and my phone number is 123-4567-89012.

变成

1,234e+56,789 Nokia 3,210s cost $123,456.7,890 and my phone number is 123-4,567-89,012.

我知道我可以反转字符串,替换\d{3}(?=\d)$&,并再次反转它,但是有没有办法只使用正则表达式(最好只有一个)?

4

2 回答 2

3

这与您的尝试几乎相同,只是颠倒过来并使用量词:

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

并将其替换为$&,.

(?:\d{3})+确保后面有 3 位数字的倍数,然后(?!\d)确保后面没有第四位或第五位数字。

如果您想在 Notepad++ 中使用它,请确保升级到版本 6。

请注意,在 Notepad++ 中,您还可以使用lookbehind:

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

并将其替换为,.

于 2013-08-16T12:48:14.313 回答
1

你可以使用这个表达式:

((?<=\d)\d{3}(?=\D|(?:\d{3})*(?:\D|$)))

并替换为,$1.

后视确保在我们匹配的 3 位数字之前有一个数字。

我们匹配的 3 位数字是您想在前面加上逗号的“千位”。

前瞻确保后面有一个非数字或一组三元组数字。

于 2013-08-16T12:47:38.877 回答