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

示例:12345678 => 12,345,678

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

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

在这里插入图片描述

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

测试:有Bug,对于3整数长度的数字,头部也会匹配到。
在这里插入图片描述

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

优化:过滤头部。添加 (?!^) 正向否定零度断言。表示不匹配 ^(行首)。
在这里插入图片描述
测试:完美替换。
在这里插入图片描述

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个数字时才匹配。
在这里插入图片描述

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

测试:完美替换。
在这里插入图片描述
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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我叫RT

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值