打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
从分组加深对正则表达式的认识

前面章节中我们也提到过分组,正则表达式中利用括号可以实现分组的目的,那么分组和不分组有什么区别呢?


我们通过逐句运行代码时本地窗口的变化来了解下两种情况下正则的区别:


一、不分组的情况:



上面这个案例很简单,把单价提取出来。我们看下本地窗口中红框部分,非常简单,就是代码部分开始声明的几个变量。



二、分组的情况:



这是昨天文章中留给大家思考的案例,代码如下:


当我们运行完 For Each m In mat 时,我们看下本地窗口:



我们发现mat这个对象跟我们的字典类似,有count,代表匹配成功的item项的个数,每个item又有三个属性,firstindex表示匹配成功的Item的起始位置,length代表item的长度,value代表值。


我们看到length下面还有个Submatches,这是个集合,下面同样有count,item,此例中两个item分别是两个分组所匹配的内容。


当正则表达式中有分组时,执行表达式就会产生Submatches集合,利用这个特点我们就可以轻松的把各个分组的内容给提取出来。


本例代码中:

Cells(n 2, 2) = .Replace(m.Value, '$1')

Cells(n 2, 3) = .Replace(m.Value, '$2')


m是每个匹配成功的内容,把每个匹配成功的内容替换成分组的内容。$1,$2是每个分组的值的简写。通过正则测试软件也可看到:



当然我们也可以直接把Submatches的item的值放到相应位置,代码如下:


Sub 提取2()

Dim regx As Object, mat, m, n%

Set regx = CreateObject('vbscript.regexp')

With regx

.Global = True

.Pattern = '(\d )\.?([一-龢] )'

Set mat = .Execute([a1])

For Each m In mat

n = n 1

Cells(n 2, 2) = m.submatches(0)

Cells(n 2, 3) = m.submatches(1)

Next

End With

End Sub


当然红色部分也可以写成:

Cells(n 2, 2) = '$1'

Cells(n 2, 3) = '$2'


经过这样的举一反三以后,我们就知道了m.submatches(0)就可以简写成'$1'。


今天的分享就到这里了!大家可以在留言区进行交流!



觉得不错,请点赞 ↓ ↓ ↓

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
VBA正则表达式入门与提高
使用分组法多段拆分混杂字符串
正则表达式匹配排列
正则表达式2
正则表达式基础符号(4) | VBA实例教程
Excel 正则表达式入门与提高
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服