我的目标:让中国的大学生走出校门的那一刻就已经具备这些Office技能,让职场人士能高效使用Office为其服务。支持鹏哥,也为自己加油!
前面章节我们见识了正则表达式中元字符的强大,但有时候我们想要匹配的字符串有长度的要求,正则表达式中的量词就是专门为解决这个问题而生的。
正则表达式中的量词如下:
? 匹配前面的子表达式零次或一次。
+ 匹配前面的子表达式一次或多次。
* 匹配前面的子表达式零次或多次。
{n}n 是一个非负整数。匹配确定的n次。
{n,} n是一个非负整数。匹配确定的n次。
{n,m} n和m均为非负整数,其中n<=m。匹配前面子表达式最少n次,最多m次。
我们通过具体的案例来体会下。
案例一:一:
图中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+"。
案例二:
案例二:
把原数据中的“-”统一成两个。
匹配“-”至少两次
代码如下:
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
向右滑动可以查看完整代码
案例三:
案例三:
这是前几天一位群友问我的问题,把原数据中连续的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
非诚勿扰!
每天进步一点,每天提升一点!