vba正则表达式语法大全(vba正则表达式语法大全)

http://www.itjxue.com  2023-01-28 06:02  来源:未知  点击次数: 

如何在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

(责任编辑:IT教学网)

更多

推荐Mail服务器文章