正则表达式之分组
Posted 鹏哥工作室之office
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则表达式之分组相关的知识,希望对你有一定的参考价值。
为了匹配各种类型的字符,正则表达式中引入了元字符,为了解决匹配字符的个数,引入了量词,有时需要匹配单个字符,有时需要把字符串作为一个整体来匹配,所以我们还要学习一下分组。
如:abc{2,} 与 (abc){2,}是完全不同的两个匹配。
abc{2,},表示匹配abc,最后那个c出现至少两次,所以匹配出来的是abcc,abccc,abcccc,……
(abc){2,},把abc当作一个整体来匹配,至少出现两次,匹配出来的是abcabc,abcabcabc,……
所以,在正则表达式中可以用()来进行分组,解决单个与整体的问题。
另外正则表达式中用“|”来表示或者的关系,比如,a|b,表示匹配a或者是b。
下面我们通过具体的案例来体会下上面所讲的内容。
案例一:
凡是两个VBA连在一起的保留一个VBA即可,不区分大小写。
代码如下:
Sub 去除重复()
Dim regx As Object
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.ignorecase = True '不区分大小写,false则区分大小写
.Pattern = "(VBA){2,}"
[b1] = .Replace([a1], "VBA")
End With
End Sub
本案例中VBA就作为一个整体进行匹配,所以用括号。另外我们还学习到了如何区分大小写,ignorecase = True '不区分大小写,false则区分大小写。
案例二:
把经理或者是总监替换为高管。
代码如下:
Sub 替换()
Dim regx As Object, rng As Range
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.Pattern = "总监|经理"
For Each rng In [a2:a9]
Cells(rng.Row, 2) = .Replace(rng, "高管")
Next
End With
End Sub
本例中我们练习的是正则表达式中或的表达。
案例三:
筛选以上海或者北京开始,一办或者三办结束的内容。
代码如下:
Sub 筛选()
Dim regx As Object, rng As Range, mat, n, m
Set regx = CreateObject("vbscript.regexp")
With regx
.Global = True
.Pattern = "(上海|北京).*(一办|三办)"
For Each rng In [a2:a28]
Set mat = .Execute(rng)
For Each m In mat
n = n + 1
Cells(n + 1, 2) = m
Next
Next
End With
End Sub
.Pattern = "(上海|北京).*(一办|三办)",(上海|北京)这个很好理解,北京或者上海,中间的点号是元字符,. 匹配除"\n"之外的任何单个字符,星号是量词,* 匹配前面的子表达式零次或多次,点号和星号结合就表示任意零个或者是单个或者是多个字符,后面的表示一办或者三办结束。
通过上面三个例子,我们可以感受到,元字符,量词,分组结合在一起,可以实现很强大的匹配功能。
今天的分享就到这里了!
后台回复下列红色关键词可以获取相关资源:
1、office365, office 365, 365,可以获取office365版本
2、excel学习, Excel学习,可以获取相关的学习资料
3、VBA学习,可以获取相关的学习资料
4、excel扩展,可以获取excel扩展工具,能让excel更加高效方便的工作
5、百度云破解限速,可以获取相关软件
6、PPT模板, ppt模板,可以获取相关资源
7、快查手册,可以获取函数快查手册
8、微信清粉, 清粉,可以获取微信僵尸粉清理软件
注意是后台回复,不是留言区回复,而且回复的关键字必须跟上面的关键字一样,注意大小写,空格之类。
长按识别下方二维码关注,
后台菜单中有更多精彩内容等着你!
苹果用户可通过下方二维码赞赏!
觉得不错请点赞!!!
以上是关于正则表达式之分组的主要内容,如果未能解决你的问题,请参考以下文章