作为可视化的一部分,我想在字符串中的任意数字(连续的数字字符串)中添加数千个分隔符。它不需要考虑数字的上下文,例如。
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)
替换$&,
并再次反转它,但是有没有办法只使用正则表达式(最好只有一个)?
答案 0 :(得分:3)
这与你的尝试几乎相同,只是反过来并使用量词:
\d(?=(?:\d{3})+(?!\d))
并将其替换为$&,
。
(?:\d{3})+
确保后面有3位数的倍数,然后(?!\d)
确保后面没有第四位或第五位。
如果要在Notepad ++中使用它,请确保升级到版本6.
请注意,在Notepad ++中,您还可以使用lookbehind:
(?<=\d)(?=(?:\d{3})+(?!\d))
并将其替换为,
。
答案 1 :(得分:1)
你可以使用这个表达式:
((?<=\d)\d{3}(?=\D|(?:\d{3})*(?:\D|$)))
并替换为,$1
。
lookbehind确保在我们匹配的3位数之前有一个数字。
我们匹配的3个数字是您之前想要逗号的“数千个”。
前瞻确保后面有一个非数字或一组三位数字。