Regex:##
// 以逗号分隔数据,每三位做一个分隔
(?<=\d)(?<!\.\d*)(?=(?:\d{3})+(?:\.|$))
// replace to ","
Analysis:##
-
(?<=\d)
零宽断言,匹配第一个数字以后的位置,防止出现类似 ,123,456
等在数据开头添加分隔符的情况
-
(?<!\.\d*)
零宽断言,反向匹配,匹配小数点以前的位置,防止出现类似 123,456.789,123
等在小数点之后插入分隔符的情况
-
(?=(?:\d{3})+(?:\.|$))
零宽断言,(?:\d{3})+
正向查找三个数字连续出现的情况 (?:\.|$)
最终以小数点或者数据末位结尾
- 整个表达式并没有匹配任何字符,仅仅匹配位置,然后将获取到的应该插入分隔符的位置替换为逗点分隔符
- 表达式中的数字3和替换字符逗号可按需替换
Test Case:##
-4321234.12345678
1231238947
13405023405179
+19823748917
+10293490.12341954234
1902378490103.1239412793
-1239478193.1234523452341
123
123456
Result:##
-4,321,234.12345678
1,231,238,947
13,405,023,405,179
+19,823,748,917
+10,293,490.12341954234
1,902,378,490,103.1239412793
-1,239,478,193.1234523452341
123
123,456