博客
关于我
VBA之正则表达式(9)-- 添加千分位(1/3)
阅读量:278 次
发布时间:2019-03-03

本文共 914 字,大约阅读时间需要 3 分钟。

在正则表达式中有如下几种环视(断言),很多正则的教学文章中都会讲解其含义,也有一些例子。

正则表达式 说明
(?<=Expression) 逆序肯定环视,表示所在位置左侧能够匹配Expression
(?<!Expression) 逆序否定环视,表示所在位置左侧不能匹配Expression
(?=Expression) 顺序肯定环视,表示所在位置右侧能够匹配Expression
(?!Expression) 顺序否定环视,表示所在位置右侧不能匹配Expression

环视的一个经典应用就是添加千分位:(?<!\.\d+)(?<=\d+)(?=(\d{3})+(?!\d)),正则表达式看起来似乎有些乱,四种环视都用到了,而且还有嵌套。

正则表达式 说明
(?<!.\d+) 表示所在位置左侧没有小数点加数字
(?<=\d+) 表示所在位置左侧只有数字
(?!\d) 表示所在位置右侧不是数字
?=(\d{3})+(?!\d) 表示所在位置右侧连续数字字符个数是三的整数倍,并其后跟随一个非数字字符(小数点,结束标识等)

效果如图所示,整数和小数都可以正常添加千分位。

正则表达式有了,VBA中不就是手到擒来的事情吗,其实不然,VBA中通常使用的是VBScript正则,不支持逆序环视,这也是大家经常听到的说法 – 添加千分位在VBA正则中无法实现,用Format函数实现吧。这个说法未必正确,不支持逆序环视是肯定的,但是可以有变通的方法来实现这个需求。


先简化一下应用场景,如果只考虑整数,回想一下千分位的规则,从右向左每三位划分为一组,那么N组三位数字的右侧一定就是行的结束标识了,由于VBA不支持逆序环视,所以就不能基于定位之前的字符组合了,但是可以提取三位数字组合左侧的一位数字作为匹配组,用于正则替换。

对于包含小数的字符串,三位组从小数点开始向左数,所以N组三位数字的右侧就是小数点。

现在合并两个正则表达式如下图,其结果和想象的不同,末尾$本来是希望用来匹配整数的结尾,但是第一行的小数部分也符合这个模式,所以小数部分也添加了千分位,这显然是不对。

这篇博文先讲到这里,下一篇继续分享这个话题。


相关博文链接:

转载地址:http://cdjl.baihongyu.com/

你可能感兴趣的文章
报错:在IDEA中springboot项目操作数据库,配置文件驱动com.mysql.cj.jdbc.Driver标红
查看>>
redis报错(error) NOAUTH Authentication required.解决办法
查看>>
1.Redis(缓存数据库)系列之认识redis缓存【穿透、击穿、雪崩】
查看>>
对象和封装
查看>>
同时在写四门编程语言是怎样一种体验?
查看>>
【背包dp】P5020 货币系统
查看>>
【树形dp】P1273 有线电视网
查看>>
【分层图最短路】P4568 [JLOI2011]飞行路线
查看>>
【最短路】P4408 [NOI2003]逃学的小孩
查看>>
回文自动机
查看>>
2020C证(安全员)模拟考试题及C证(安全员)模拟考试系统
查看>>
2020A证(安全员)模拟考试及A证(安全员)证考试
查看>>
2020电工(初级)考试及电工(初级)考试软件
查看>>
2020建筑电工(建筑特殊工种)实操考试视频及建筑电工(建筑特殊工种)作业模拟考试
查看>>
2020N1叉车司机模拟考试题库及N1叉车司机复审模拟考试
查看>>
2020熔化焊接与热切割考试及熔化焊接与热切割考试题库
查看>>
2020年G3锅炉水处理报名考试及G3锅炉水处理考试申请表
查看>>
2020年R2移动式压力容器充装答案解析及R2移动式压力容器充装免费试题
查看>>
2020年制冷与空调设备运行操作答案解析及制冷与空调设备运行操作考试总结
查看>>
2020年保育员(初级)考试资料及保育员(初级)新版试题
查看>>