VBA之正则表达式(9)-- 添加千分位(1/3)

159 篇文章 16 订阅
49 篇文章 18 订阅

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

正则表达式说明
(?<=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组三位数字的右侧就是小数点。

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

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


相关博文链接:
VBA之正则表达式(1)-- 基础篇
VBA之正则表达式(2)-- 批量修改公式
VBA之正则表达式(3)-- 特殊公式计算
VBA之正则表达式(4)-- 提取日期和金额
VBA之正则表达式(5)-- 中文字符
VBA之正则表达式(6)-- 设置音标格式
VBA之正则表达式(7)-- 乾坤大挪移(数据整理)
VBA之正则表达式(8)-- 重复字符分组
VBA之正则表达式(9)-- 添加千分位(1/3)
VBA之正则表达式(10)-- 添加千分位(2/3)
VBA之正则表达式(11)-- 添加千分位(3/3)

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值