VBA中的正则表达式(三)

VBA中的正则表达式(三)

——Pattern属性和Execute方法

1. Pattern属性

该属性没有固定的可选值,是设置正则表达式规则使用的。

2. 正则表达式中各符号代表的含义

字符描述举例
\\ 后面加一个特殊字符,用来表示字符本身.Pattern = "\." ,表示查找文本中的.号
.匹配任何单个字符(换行符除外).Pattern = "." ,表示查找文本中除换行符以外的其他字符
+放在某字符后面,表示匹配该字符一次或多次例如我们要在一个文本中找到s、ss、sss等单个出现或者连续出现的字符,正则表达式可以写为:.Pattern = "s+"
*放在某字符后面,表示匹配该字符零次或多次表示我们查找的字符,在文本中可能不存在(无s),可能会单个出现(s),也可能连续出现(ss或sss)
?放在某字符后面,表示匹配该字符零次或一次表示我们查找的字符,在文本中可能不存在(无s),可能会单个出现(s);如果连续出现(ss或sss),则不能匹配到
{n}放在某字符后面,表示准确地匹配该字符n次(n必须是一个非负整数)例如我们要在一个文本中找到ss,正则表达式可以写为:.Pattern = "s{2}"
{n,m}放在某字符后面,表示至少匹配该字符n次,最多匹配m次(m和n必须都是非负整数)例如我们要在一个文本中找到s、ss,正则表达式可以写为:.Pattern = "s{1,2}"
[xyz]匹配中括号中包括的任一个字符例如我们要在一个文本中查找是否有s、w、h,正则表达式可以写为:.Pattern = "[swh]"
[^xyz]匹配中括号中不包括的字符与[xyz]含义相反,^表示非的意思
[a-z]匹配指定范围内的字符(a-z表示字符的范围)例如我们要在一个文本中找到是否有[a-e]之间的字符,正则表达式可以写为:.Pattern = "[a-e]"
[^a-z]匹配指定范围以外的字符(^a-z表示指定范围的补集)与[a-z]含义相反,^表示非的意思
\d匹配数字。等价于[0-9]
\D匹配非数字。等价于[^0-9]
\n匹配换行符
\r匹配回车符
\s匹配空白,包括空格、制表符、换页符等\S,匹配非空白的字符
\w匹配字母、数字,以及下划线。等价于"[A-Za-z0-9_]"\W,匹配非字符数字
  • x|y,表示匹配x或y,例如我们要在一个文本中找到是否有a或b,正则表达式可以写为:.Pattern = "a|b"

3. 常用的正则表达式

功能正则表达式文本中的样式
匹配Email地址.Pattern = "\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*"适用于大多数邮箱
电话号码.Pattern = "\d{3,4}-\d{7,8}"0588-2222222 或 021-88888888
ip地址.Pattern = "\d+\.\d+\.\d+\.\d+"888.888.888.888
身份证号.Pattern = "\d{18}"

4. 正则表达式编写的方法

以qq邮箱的识别为例(888888888@qq.com)

  • 观察特征:先观察要提取文本的特征;
  • 扩大特征:将特征扩大,变成普遍的特征;
  • 转化特征:将特征转化为正则表达式。
案例888888888@qq.com
观察特征9个8一个特定字符2个q一个特定字符三个字母
扩大特征多个数字一个特定字符多个字母一个特定字符多个字母
转化特征\d+@[a-z]+\.[a-z]+

qq邮箱的正则表达式为:\d+@[a-z]+\.[a-z]+

5. 案例

Sub regular_study()
    '创建正则表达式对象,并命名为re
    Dim re As Object
    Set re = CreateObject("VBScript.RegExp")
    With re
        .Global = True '匹配字符串中,所有与正则表达式规则相符的地方
        .IgnoreCase = False '匹配时区分大小写
        'mytxt为案例的文本
        mytxt = "欢迎学习宏蜘蛛正则表达式系列课程。如有任何意见或建议,可通过8888888888@qq.com与我联系!"
        'Pattern设置正则表达式的特征
        .Pattern = "\d+@[a-z]+\.[a-z]+"
        'Execute将查找的结果赋值给myresults,返回的结果是个数组
        Set myresults = .Execute(mytxt) '将正则表达式应用到字符串上,并得到返回结果
        Debug.Print "mytxt字符串中的邮箱地址为:" & myresults(0)
    End With
End Sub

6. 输出结果↓

mytxt字符串中邮箱地址为:8888888888@qq.com

7. Execute方法

将正则表达式应用到字符串上并返回匹配结果,返回结果是数组类型。该方法有一个参数,即需要匹配的字符串。在实际使用时,代码如下:

Set Matches = regEx.Execute(string)

代码解析

Set为固定语法,不可修改或删除;

Matches为自定义变量,可以修改为其他名称,如a或b等,案例中的名称为myresults

regEx为前面对正则表达式对象的命名,案例中我们将其名称设置为re;该名称可在最初设置正则表达式对象时,将其命名为自己想要的名称,后面即可引用前面的自定义名称。

.Execute()为固定语法,不可修改或删除;

string.Execute()括号中的string为需要解析的字符串,该名称可根据实际需要修改为其他名称;案例中的名称为mytxt

8. Pattern属性总结

通过该属性,以字符串的形式,定义正则表达式的特征或规则。

9. Execute方法总结

通过该方法,从目标文本中,获取符合正则表达式规则的内容。正则表达式规则在Pattern属性中定义。

参考资料

1、VBScript: 正则表达式(RegExp对象)

2、VBScript.RegExp 正则表达式excel vba 学习经验

3、常用正则表达式

  • 2
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值