VBA中正则表达式匹配字符串的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA中正则表达式匹配字符串的问题相关的知识,希望对你有一定的参考价值。

目标字符串:第一条 第二条 ... 第N条

dim reg as object
set reg=createobject("vbscript.regexp")
with reg
    .pattern="第[一二三四五六七八九十百千万零〇]+条"'自己看文本情况选择增加^$限定
    .Global=true
end with
if reg.test("测试文本")=true then
    str=reg.replace("测试文本","替换结果表达式")'替换结果中,如果需要使用后向引用,\\应写为$,如$1$2.
end if

参考技术A 以前在网上找到一个VBA编写的正则表达式函数,如果要的话可以联系我 参考技术B 第[零一二三四五六七八九十百]+条

求VBA中一简单正则表达式

求匹配中间字符串的正则表达式!

如:abcdef (字符串很复杂,这只是简化举例)

如何利用两边ab,ef;得到中间一段cd

().*(?=ef)

前面小括内该如何写法???或是有其它写法???
'利用正则式提取字符串中的特定字符自定义函数
'要引用microsoft vbscript regular expressions 5.5

Function RegExpTest(patrn, strng)
Dim RegEx, Match, Matches ' 建立变量。
Set RegEx = New RegExp ' 建立正则表达式。
With RegEx
.Pattern = patrn ' 设置模式。
.IgnoreCase = True ' 设置是否区分字符大小写。
.Global = False ' 设置全局可用性。
Set Matches = .Execute(strng) ' 执行搜索。
End With

For Each Match In Matches ' 遍历匹配集合。
'RetStr = RetStr & "Match found at position "
'RetStr = RetStr & Match.FirstIndex & ". Match Value is '"
'RetStr = RetStr & Match.Value & "'." & vbCrLf
retstr = Match.Value
Next

RegExpTest = retstr
End Function

Sub TEST()

MsgBox (RegExpTest("(?<=ab).+(?=ef)", "abcdef")) 'EXCEL中出错

End Sub

参考技术A (?<=ab).+(?=ef)
即可
用+替代掉*就去除了abef这样连用而中间没内容的部分

我找到原因了,查MSDN发现VBScript的正则太简单了,不支持标准正则的位置锚定的(?<)和(?=)
因此改成
ab.+ef
这样会返回abcdef,好在ab和ef都是确定的,从结果中去掉就可以了,可以用replace,也可以直接用instr之类的函数。
参考技术B VB 不支持后瞻,所以只能用分组实现.直接分组替换

Dim ResultString As String
Dim myRegExp As RegExp
Set myRegExp = New RegExp
myRegExp.Global = True
myRegExp.Pattern = "(?:ab)(.+)(?:(?:ef))"
ResultString = myRegExp.Replace(SubjectString, "$1")本回答被提问者采纳

以上是关于VBA中正则表达式匹配字符串的问题的主要内容,如果未能解决你的问题,请参考以下文章

求VBA中一简单正则表达式

如何用excel中的VBA的正则表达式提取出字符串?

VBA 正则表达式匹配模式

正则表达式方法

一个可以使用多个正则表达式进行多次尝试匹配,并进行替换的Excel VBA自定义函数(UFD)

基础扩展 | 08. VBA正则表达式