python正则表达式怎么表示零个或多个字符_正则表达式中的分组、或与非!

我的目标:让中国的大学生走出校门的那一刻就已经具备这些office技能,让职场人士能高效使用office为其服务。支持我,也为自己加油!

为了匹配各种类型的字符,正则表达式中引入了元字符;为了解决匹配字符的个数,正则表达式中引入了量词;但有时需要匹配单个字符,有时又需要把字符串作为一个整体来匹配,所以正则表达式中又引入了一个概念,分组。

如:abc{2,} 与 (abc){2,}是两个完全不同的匹配。

abc{2,},表示匹配abc,最后那个c出现至少两次,所以匹配出来的是abcc,abccc,abcccc,……

 (abc){2,},是把abc当作一个整体来匹配,至少出现两次,匹配出来的是abcabc,abcabcabc,……

在正则表达式中可以用()来进行分组,解决单个字符与字符串整体匹配的问题。

另外正则表达式中用“|”来表示或者的关系,比如,a|b,表示匹配a或者是b。

下面我们通过具体的案例来体会下上面所讲的内容。

案例一:

3ac89979cf021b1460f5418bb32b9e07.gif

要求:A1单元格内容中凡是两个VBA(不区分大小写)连在一起的保留一个VBA即可。

代码如下:

Sub 去除重复()Dim regx As ObjectSet regx = CreateObject("vbscript.regexp")With regx    .Global = True    .ignorecase = True '不区分大小写,false则区分大小写    .Pattern = "(VBA){2,}"    [b1] = .Replace([a1], "VBA")End WithEnd Sub

向右滑动可以查看完整代码

本案例中“VBA”就作为一个字符串整体进行匹配,所以用括号。另外我们还学习到了如何在匹配时区分大小写,ignorecase = True '不区分大小写,ignorecase =false则区分大小写。

案例二:

5d3b08c029c9f8a20c41ad91c51e89d5.gif

要求:把经理或者是总监替换为高管。

代码如下:

Sub 替换()Dim regx As Object, rng As RangeSet regx = CreateObject("vbscript.regexp")With regx    .Global = True    .Pattern = "总监|经理"    For Each rng In [a2:a9]          Cells(rng.Row, 2) = .Replace(rng, "高管")    NextEnd WithEnd Sub

向右滑动可以查看完整代码

本例中我们练习的是正则表达式中"或"的表达。

案例三:

03738f4921b1afe4dfe1d55ed1669afc.gif

要求:筛选出上海或者北京开始,一办或者三办结束的内容。

代码如下:

Sub 筛选()Dim regx As Object, rng As Range, mat, n, mSet 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    NextEnd WithEnd Sub

向右滑动可以查看完整代码

 .Pattern = "(上海|北京).*(一办|三办)",(上海|北京)这个很好理解,北京或者上海,中间的点号是元字符,“. ” 号匹配除"\n"之外的任何单个字符,星号是量词,“*” 匹配前面的子表达式零次或多次,点号和星号结合就表示任意零个或者是单个或者是多个字符,后面的(一办|三办)表示一办或者三办结束。

通过上面三个例子,我们可以感受到,元字符,量词,分组、或与非结合在一起,可以实现很强大的匹配功能。

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

聚米为谷

博学宏才

如果对VBA感兴趣

手机端请扫描

2d3effe50b3996173d80629d39d5bf3e.png

电脑端请登录

www.mihong.top

找到《带你走进VBA的世界》

跟着我一步步学习VBA

本节的分享就到这里,鹏哥祝大家每天都有进步。 6c621715cfa5d20ada7e456b67346ec5.gif 您点的每个赞,我都认真当成了喜欢
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值