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 | @ | . | 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属性中定义。
- 本文章,首发于微信公众号:宏蜘蛛,原文链接:VBA中的正则表达式(三)
参考资料