vba 正则表达式_VBA中正则表达式之量词

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

前面章节我们见识了正则表达式中元字符的强大,但有时候我们想要匹配的字符串有长度的要求,正则表达式中的量词就是专门为解决这个问题而生的。

正则表达式中的量词如下:

?          匹配前面的子表达式零次或一次。

+           匹配前面的子表达式一次或多次。

*            匹配前面的子表达式零次或多次。

{n}n       是一个非负整数。匹配确定的n次。

{n,}      n是一个非负整数。匹配确定的n次。

{n,m}   n和m均为非负整数,其中n<=m。匹配前面子表达式最少n次,最多m次。

我们通过具体的案例来体会下。

案例一:一:

5fe8b742b8ab6cb8b104c72481b59118.gif

图中B列数据姓名之间有的有换行符,有的没有,有的有多个换行符,有的只有一个,我们希望把其整理成右边的格式。

我们只要匹配出B列每个单元格中的汉字,至少两个字,因为姓名之间有换行符,所以用"\S{2,}"就能匹配出每个姓名来。

代码如下:

Sub 规范格式()Dim regx As Object, mat, n%, k, rngSet regx = CreateObject("vbscript.regexp")With regx        .Global = True        .Pattern = "\S{2,}"         For Each rng In [b2:b5]                Set mat = .Execute(rng)                For Each k In mat                n = n + 1                Cells(rng.Row, n + 2) = k                Next                n = 0         NextEnd WithEnd Sub

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

当然我们也可以写成.Pattern = "\S+"。

案例二:

案例二:

67e896576544f8ab588caf59e8e6bdf3.gif

把原数据中的“-”统一成两个。

匹配“-”至少两次

代码如下:

Sub 规范格式1()Dim regx As Object, rngSet regx = CreateObject("vbscript.regexp")With regx        .Global = True        .Pattern = "-{2,}"End WithFor Each rng In [a2:a7]Cells(rng.Row, 2) = regx.Replace(rng.Value, "--")NextEnd Sub

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

案例三:

案例三:

14c99b32429b733735c96b9a0d661d11.gif

这是前几天一位群友问我的问题,把原数据中连续的8位数字提取出来。

代码如下:

Sub 规范格式2()Dim regx As Object, mat, n%, k, rngSet regx = CreateObject("vbscript.regexp")With regx        .Global = True        .Pattern = "\d{8}"         For Each rng In [a2:a5]                Set mat = .Execute(rng)                For Each k In mat                n = n + 1                Cells(rng.Row, n + 1) = k                Next                n = 0         NextEnd WithEnd Sub

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

通过上面三个例子,大家应该多量词有所了解了吧!

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

坚持做自己喜欢的事情,时间会证明一切!

加入米宏Office培训群,每天进步一点点!

从基础操作到VBA,

两杯咖啡的钱,

换取一份如此详细的Excel视频资料,

你还在犹豫?

欲购从速,联系微信号:527240310

非诚勿扰!

每天进步一点,每天提升一点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值