概述
一、正则支持
- 正则的概念就不说了,就是用特殊的字符串进行字符串的匹配
- vba 本身是不支持正则的,需要引入外部的支持

二、基本用法
1、示例代码
Sub text()
Dim reg As New RegExp
sr = "ABCA"
Dim ret
With reg
.Global = True
.Pattern = "A"
.MultiLine = True
Set ret = .Execute(sr)
End With
For Each r In ret
Debug.Print r
Next r
End Sub
2、细节说明
- 创建正则对象还可以通过
createObject("vbscript.regexp") Global属性代表是否进行全局匹配,false 的话就返回匹配的第一个,true的话会搜索全部的字符multiline是设置是否进行多行的匹配,存在换行符的时候可以使用Pattern是最核心的设置我们的匹配的规则ignoreCase属性可以设置是否区分大小写- 最后的
Execute方法可以返回匹配的结果集合,结果集包含的信息包括firstIndex、length、value - 如果采用
test方法的话返回的就是true 或者false - 结果集可以使用
for进行遍历输出
特殊符号
一、\
- 换行符、制表符等中使用:
\r \n \t - 用来转义使用:
\$ \. - 特殊意义符号使用,大写的时候表示非
\d--匹配数字
\w--匹配数字或字母
\s--匹配空格、制表符等
二、.
- 匹配除换行符以外的任意字符
三、+ * ?
?代表出现0次或者1次*代表0、1、无数+代表至少一次
四、{}
- {n}
- {n,m}
- {n,}
1、正则对象的
replace(sr," ")方法是将匹配的内容进行置换,所以只有两个参数
2、.*匹配所有是贪婪模式,是尽可能多进行匹配.*?是比较合理的通用匹配方式
五、[]
- 匹配一个:
[ABC] - 非括号内容:
[^a] - 范围匹配:
[a-z]
六、()
- 括号内的内容作为一个整体
\num可以进行括号内容的引用,具体的后面的数字匹配的顺序是前后外内
Sub test()
Dim reg As New RegExp
Dim sr As String
sr = "A2A2B4B4QB41133AA33"
With reg
.Global = True
.MultiLine = True
.Pattern = "((A2){2})((B4){2})Q\4"
Debug.Print .Replace(sr, "")
End With
End Sub
'output:1133AA33
(?=str) (?!str)都可以进行预搜索,特点就是仅仅进行判断,不会占用匹配的位置
Sub test()
Dim reg As New RegExp
Dim sr As String
sr = "100元50元30元"
Dim ret
With reg
.Global = True
.Pattern = "(?=.*元)\d+"
'.Pattern = "\d+(?=元)"
Set ret = .Execute(sr)
End With
For Each r In ret
Debug.Print r
Next r
End Sub
Sub test()
Dim reg As New RegExp
Dim sr As String
sr = "Aaaa9"
Dim ret
With reg
.Global = True
.Pattern = "^(?=.*\d).{4,8}$"
Set ret = .Execute(sr)
End With
For Each r In ret
Debug.Print r
Next r
End Sub
()和|联合使用主要用来简化我们的书写:A\d+|B\d+和(A|B)\d+效果相同
七、^ $
- 就是首尾匹配
八、\b
- 单词边界的匹配
九、|
- 就是一个或者的逻辑:
A\d+|B\d+和(A|B)\d+效果相同,A|B\d+和前二者不同
十、\un
- 就是unicode 的表示,n为4位16进制,主要的应用就是汉字的筛选
- 汉字的 unicode 编码是
4e00到9fa5
提取我们要的字符串的时候一般2种方法:要么直接匹配我们要的字符串,要么将我们不要的给剔除
本文介绍了Excel VBA如何实现正则表达式的支持和基本用法,包括正则对象的创建、匹配规则的设置、特殊符号的含义等。通过示例代码展示了如何进行字符串匹配、替换以及边界条件的设定,对于处理复杂文本数据提供了实用的方法。
9923

被折叠的 条评论
为什么被折叠?



