VBA中正则表达式的基础语法

论坛 期权论坛 期权     
米宏Office   2019-6-29 21:07   3172   0
我的目标:让中国的大学生走出校门的那一刻就已经具备这些Office技能,让职场人士能高效使用Office为其服务。支持鹏哥,也为自己加油!

正则表达式的基本概念及用途了解之后,我们就来学习下具体的语法,先以一个简单的例子来了解。


基础语法:

比如,A1单元格中有一串字符:aabbccddaabbcc,我们要把其中的a找到,然后替换成o。


代码如下:
Sub test()
Dim regx As Object, t$, k, s, n
t = "aabbccddaabbcc"
Set regx = CreateObject("vbscript.regexp")'引用正则表达式
regx.Global = True '查找范围,true为全部查找,false只查找第一个,默认是false。
regx.Pattern = "a" '引号里书写正则表达式,这里要查找a,就直接写个a

Set k = regx.Execute(t) 'Execute方法的结果为一个对象,返回匹配成功的结果。



For Each s In k '通过循环K可以得到该对象中的每个元素。
MsgBox s
Next


n = regx.Replace(t, "o") '将匹配成功的结果做替换
MsgBox n
End Sub


上面的代码后面都有注释,首先要引用正则表达式,前期绑定也可以,直接创建也可以,然后要对regexp的两个属性做出指定。

Global属性,指查找范围,true为全部查找,false只查找第一个,如果上面案例中其属性改为false,那么只要该字符串中查找第一个a。

Pattern属性,指的是正则表达式。


下面讲下正则表达式的两个方法:


Execute方法,返回匹配成功的结果,是一个对象,通过for each 可以循环其中的值。

Replace方法,将匹配的结果做替换,regx.Replace(t, "o"),t为原字符串,第二个参数为要替换为的结果。

普通字符的替换:

了解了基础的语法之后,我们来看下如何用正则对普通的字符做替换。




如上例中,把A列部门中的门字去掉。


思路:

对A列部门循环,循环出来的值用正则表达式匹配门字,并把匹配的结果替换成空。

代码如下:
Sub test1()
Dim regx As Object, rng1 As Range
Set regx = CreateObject("vbscript.regexp")
With regx
    .Global = True
    .Pattern = "门"
End With
For Each rng1 In Range("a2:a11")
     rng1(1, 2).Value = regx.Replace(rng1.Value, "")
Next
End Sub


这里注意regexp的两个属性可以用with语法来书写,这样显得简洁明了。当然这节课我们只是对正则表达的基础语法做了个了解,正则表达式真正的魅力在Pattern = "……",引号中的表达式,后面的课程中我们会体会到它的强大之处。

本节的分享就到这里,鹏哥祝大家每天都有进步。

加入米宏Office培训群,每天进步一点点!
从基础操作到VBA,
两杯咖啡的钱,
换取一份如此详细的Excel视频资料,
你还在犹豫?
欲购从速,联系微信号:527240310
每天进步一点,每天提升一点!
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:75
帖子:15
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP