我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!
在学习正则部分的知识时,我们总会听到零宽断言,听起来好像很专业很复杂,到底什么是零宽断言呢?
举个例子:
要求:如上图中,在单元格内容中“手机”两个字的前面添加冒号和空格。
根据我们前面学过的知识,匹配每个单元格中的“手机”两字是很容易的,以前的案例一般都是提取,我们只要匹配到到相关的字符串进行替换或者直接从匹配结果中取出需要的字符串就可以了,现在的要求是需要在匹配到字符串前面加个另外一些字符串,当然用替换也能行得通,把匹配到的字符串替换成需要添加的字符串加匹配的到字符窜即可。
本节我们换个思路解决问题,如果能匹配到每个单元格中“手机”的手字前面这个位置,然后直接把这个位置直接替换为冒号+空格,是不是算解决问题了呢?
什么?正则能匹配一个位置?你确定匹配的不是字符串吗?
确实可以匹配位置,这个位置占用的宽度为零,所以叫做零宽度断言,即零宽断言。
零宽断言不匹配任何一个字符或者字符串,它匹配的是一个位置,比如上例中手机的手字前面的位置,因为仅仅匹配的是个位置,宽度是0,所以叫做零宽度断言,断言即是预测的意思嘛。
经过上面的解释,大家应该清楚什么叫做零宽断言了吧,下面看下上面案例的具体代码:
Sub lkdy()Dim regx As Object, rng As Range, n%Set regx = CreateObject("vbscript.regexp")With regx .Global = True .Pattern = "(?=手)" For Each rng In [A2:A15] n = n + 1 Cells(n + 1, 2) = .Replace(rng, ": ") NextEnd WithEnd Sub
向右滑动可以查看完整代码
上例中 Pattern = "(?=手)",一个问号和一个等号,后面加正则表达式,很好理解,就是问这个位置的后面是否等于手字,如果等于,这个位置就是我们要找的位置。
零宽断言的语法:
(?=exp),也叫零宽度正预测先行断言,它断言自身出现的位置的后面能匹配表达式。
通过这节课我们初步了解了什么是零宽断言,后面章节我们再仔细剖析下零宽断言的种类。
本节的分享就到这里,鹏哥祝大家每天都有进步。聚米为谷
博学宏才
如果对VBA感兴趣
手机端请扫描
电脑端请登录
www.mihong.top
找到《带你走进VBA的世界》
跟着我一步步学习VBA
本节的分享就到这里,鹏哥祝大家每天都有进步。![6c6526a0b3a73e542dffeb22f557ff83.gif](https://img-blog.csdnimg.cn/img_convert/6c6526a0b3a73e542dffeb22f557ff83.gif)