分享

学习VBA,报表做到飞 第四章 正则表达式 4.11 零宽断言

 Tcgood 2023-01-12 发布于河南

第四章 正则表达式

4.11 零宽断言

正则表达式匹配到一个位置,因为这个位置占用的宽度为零,所以叫零宽度断言,简称零宽断言。

零宽断言有两种格式:

1、(?=xxx) 在XXX前面

例句:(?=abc) 在字母abc的前面

123abc456,用正则表达式\d+(?=abc),就会匹配到在字母abc前面的数字123。

文章图片1

2、(?!xxx) 不在XXX前面

例句:(?![一-龢]) 不在汉字的前面

123和456,用正则表达式\d+(?![一-龢])匹配,就会匹配到12、456两个结果,汉字前面的3不会匹配到。

文章图片2

正则表达式变为\d+(?![一-龢])$,就会只匹配到456了。

文章图片3

小程序:

把下表中的姓名和联系方式筛选出来。

钱大6498316,学生

赵二5678346,个体工商户

王小虎2395799,老师

李三4466782自由职业者

Sub 零宽断言()

Dim reg As New RegExp

With reg

.Global = True

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

For Each ss In Range('a1:a4')

ss.offset(0, 1) = .Execute(ss)(0).SubMatches(0)

ss.offset(0, 2) = .Execute(ss)(0).SubMatches(1)

Next

End With

End Sub

在([一-龢]+(?=\d))(\d+)这个正则表达式里,我们用零宽断言(?=\d),定位位于数字前面的汉字来提取名字,用第二个分组来提取联系方式。每一行匹配到一个记录,两个分组:

文章图片4

程序运行后得到的结果如下:

姓名

联系方式

钱大6498316,学生

钱大

6498316

赵二5678346,个体工商户

赵二

5678346

王小虎2395799,老师

王小虎

2395799

李三4466782自由职业者

李三

4466782

这个案例也可以用首尾匹配的方式,匹配位于行首的汉字来提取名字。在实际应用中,正则表达式可以多种方式灵活运用,哪种快捷简便就优先使用哪种。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多