正则表达式 | 整数以千分位逗号分隔

示例:12345678 => 12,345,678

分析:
自右向左,每三位增加一个逗号。

表达式:/(?=(a{3})+($))/g (不完美)

正则表达式 | 整数以千分位逗号分隔_第1张图片

  • (?=..) 正向零度断言,表示匹配该子表达式前面的项
  • (\d{3})+ 表示匹配3个数字视为一个分组。
    +表示整数倍(匹配连续3个数字、6个数字、9个数字…)
  • $ 表示每一次都匹配到行尾,以防止被匹配过的项再次被匹配。

测试:有Bug,对于3整数长度的数字,头部也会匹配到。
正则表达式 | 整数以千分位逗号分隔_第2张图片

法一:表达式 /(?!^)(?=(\d{3})+$)/g (推荐)

优化:过滤头部。添加 (?!^) 正向否定零度断言。表示不匹配 ^(行首)。
正则表达式 | 整数以千分位逗号分隔_第3张图片
测试:完美替换。
正则表达式 | 整数以千分位逗号分隔_第4张图片

python代码:

# coding=utf8
# 上述标签定义了本文档的编码,与Python 2.x兼容。

import re

regex = r"(?!^)(?=(\d{3})+$)"

test_str = ("12345678\n"
	"123456789\n"
	"1234567895642342\n"
	"324252353262363")

subst = ","

# 您可以通过改变第4个参数来手动指定替换的数量
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)


法二:/(\d)(?=(\d{3})+$)/g

优化:选择匹配前一个数字。只有当该数字后面有n对3个数字时才匹配。
正则表达式 | 整数以千分位逗号分隔_第5张图片

只不过,当前表达式匹配到的项是原本字符串中就存在的,不能单纯的替换。需要在原本的匹配项上追加,字符。

测试:完美替换。
正则表达式 | 整数以千分位逗号分隔_第6张图片
python代码:

# coding=utf8
# 上述标签定义了本文档的编码,与Python 2.x兼容。

import re

regex = r"(\d)(?=(\d{3})+$)"

test_str = ("12345678\n"
	"123456789\n"
	"1234567895642342\n"
	"324252353262363")

subst = "$1,"

# 您可以通过改变第4个参数来手动指定替换的数量
result = re.sub(regex, subst, test_str, 0, re.MULTILINE)

if result:
    print (result)

你可能感兴趣的:(#,正则表达式,正则表达式)