上一篇文章(参见文末的参考资料[1])提到,简单合并正则表达式的运行结果并不理想,问题在于小数部分也可能匹配到。
目前的重点是如何过滤到小数部分的数字,使之不被捕获。使用如下的正则表达式:
((\.\d+[\w\W]*?)*?\d)(?=(\d{3})+(\D|$))
(1)?=(\d{3})+(\D|),顺序肯定环视,所在位置的右侧,连续数字字符的个数是三的整数倍;并且其后跟随一个非数字字符,或者结束标识符。\D,表示非数字字符。
(2)\.\d+[\w\W]*?
,也就是捕获组$2
。小数点后至少跟一个数字,非贪心匹配任意数量的任意字符(可以有,也可以没有)。\w
匹配字母和数字;\W
匹配非字母和非数字。[\w\W]
就是匹配任意字符。多提一句,字符.
,匹配的是任意字符,但换行符除外。
(3)($2)*?\d
,匹配任意数量的匹配组2,后跟一个数字。也就是说,可以有或者没有小数点。
运行效果:
文本1:123456789
替换文本:$1,
结果:123,456,789
文本2:
圆周率3.1415926535
珠穆朗玛峰高度8848.0
替换文本:$1,
结果:
圆周率3.1415926535
珠穆朗玛峰高度8,848.0
文本3:1234576.7898
替换文本:$1,
结果:1,234,576.7,898
可以看出,包含小数的字符串出现在文本末尾时,正则表达式的运行效果还是不太理想。由于小数部分符合匹配规则,因此,小数部分也添加了千分位。
(未完待续)
参考资料:
[2] 正则测试(https://tool.chinaz.com/regex)
[3] VBA之正则表达式(10)-- 添加千分位(2/3)(https://blog.csdn.net/taller_2000/article/details/89792241)
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有