vba正则表达式语法大全(vba正则表达式语法大全)
如何在Excel VBA 中使用正则表达式
1
新建一个空白工作簿,在工作表界面按下组合快捷键Alt+F11或者右键单击任意一个工作表标签,在弹出的右键快捷菜单单击“查看代码”进入VBA编辑环境,如下图所示:
如何在Excel VBA 中使用正则表达式?
2
在“代码窗口“中复制粘贴以下代码:
Sub RegTest()
'定义正则表达式对象
Dim oRegExp As Object
'定义匹配字符串集合对象
Dim oMatches As Object
'创建正则表达式
'定义要执行正则查找的文本变量
Dim sText As String
sText = "这是v一个正则表达式b的范例程序a代码"
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
'设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
.Global = True
'设置是否区分大小写,True表示不区分大小写, False表示区分大小写
.IgnoreCase = True
'设置要查找的字符模式
.Pattern = "[\u4e00-\u9fa5]+"
'判断是否可以找到匹配的字符,若可以则返回True
MsgBox .Test(sText)
'对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
Set oMatches = .Execute(sText)
'把字符串中用正则找到的所有匹配字符替换为其它字符
MsgBox .Replace(sText, "")
End With
Set oRegExp = Nothing
Set oMatches = Nothing
End Sub
如下图所示:
如何在Excel VBA 中使用正则表达式?
3
执行以上代码,将把 sText = "这是v一个正则表达式b的范例程序a代码" 变量中的中文字符全部删除,将只返回"vba"3个英文字符,如下图所示。其中的.Pattern = "[\u4e00-\u9fa5]+"表示匹配所有中文字符,Pattern属性是正则表达式对象的核心,当需要执行其它查找替换时一般都只需更改Pattern属性即可。
如何在Excel VBA 中使用正则表达式?
4
一些常见的正则Pattern如下:
[0-9]表示匹配任意一个数字
[a-zA-Z]表示匹配任意一个英文字母
[\u4e00-\u9fa5]表示匹配任意一个中文字符
Excel 怎么样写VBA正则表达式
分享一个以前的qq日记
做一个从word文档读取数据写入excel的工具,遇到一个问题是word表格中包含一些隐藏字符,例如换行、回车等不可见字符时,要将这些字符去除后才能同关键字进行比较运算。从百度找到了一段代码修改成一个去除字符的函数,感觉挺好用,在这里记录一下。
Function qczf(A)
With CreateObject("vbscript.RegExp")
.Global = True
.ignorecase = True
.Pattern = "[^0-9A-Za-z一-龥]"
qczf = .Replace(A, "")
End With
End Function
取一串字符串中的数字
Sub RegTest()
Dim oRegExp As Object
Dim oMatches As Object
Dim sText As String
sText = "柴塘河节制闸3300×4960平面钢闸门AAA9999BBB888"
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
.Pattern = "\D+(\d+)\D+(\d+)\D+(\d+)\D+(\d+)"
Set oMatches = .Execute(sText)
Debug.Print oMatches(0).submatches(0) '第一个数
Debug.Print oMatches(0).submatches(1) '第二个数
Debug.Print oMatches(0).submatches(2) '第三个数
Debug.Print oMatches(0).submatches(3) '第四个数
End With
Set oRegExp = Nothing
Set oMatches = Nothing
End Sub
下面这段代码实现:去除所有中文
Sub RegTest3()
'定义正则表达式对象
Dim oRegExp As Object
'定义匹配字符串集合对象
Dim oMatches As Object
'创建正则表达式
'定义要执行正则查找的文本变量
Dim sText As String
sText = "这是v一个正则表达式b的范例程序a代码"
Set oRegExp = CreateObject("vbscript.regexp")
With oRegExp
'设置是否匹配所有的符合项,True表示匹配所有, False表示仅匹配第一个符合项
.Global = True
'设置是否区分大小写,True表示不区分大小写, False表示区分大小写
.IgnoreCase = True
'设置要查找的字符模式
.Pattern = "[\u4e00-\u9fa5]+"
'判断是否可以找到匹配的字符,若可以则返回True
'MsgBox .test(sText)
'对字符串执行正则查找,返回所有的查找值的集合,若未找到,则为空
'Set oMatches = .Execute(sText)
'把字符串中用正则找到的所有匹配字符替换为其它字符
'MsgBox .Replace(sText, "")
mys = .Replace(sText, "")
Debug.Print mys
End With
Set oRegExp = Nothing
Set oMatches = Nothing
End Sub
VBA 正则表达式语法?
正则语法几乎都一样。 VBA你调用的是VBScript.RegExp正则库吧。
VBScript正则不支持零宽断言语法。相对C#正则来说VBScript正则就弱了一点,其他的语法都是一样的。
还有 \\d{4}Q\\d{3}
这句话我不知道你是不是从C#或C++中复制过来的,VBA中这个“\”斜杠不是转义符来的。所以要注意改成 \d{4}Q\d{3} 就可以了。
vba正则表达式
正则表达式进行模糊替换的例子代码:
Sub?TestReplace()
Dim?ss,?re,?rv?
ss?=?"12苏5a中国人民一二d三"?vbNewLine?"egg其d中国人民四a1五六"?vbNewLine"凡dsf事都美国纽约AAFa分"?vbNewLine"发的事都美国纽约A分Fa分"??vbNewLine?????
Set?re?=?New?RegExp?
re.Pattern?=?"^\S+(中国人民|美国纽约)\S+$"?????
re.Global?=?True?????
re.IgnoreCase?=?True?????
re.MultiLine?=?True?
rv?=?re.Replace(ss,?"$1")?????
MsgBox?rv?
?
End?Sub