VBA中正则表达式匹配字符串的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA中正则表达式匹配字符串的问题相关的知识,希望对你有一定的参考价值。
目标字符串:第一条 第二条 ... 第N条
dim reg as objectset 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
即可
用+替代掉*就去除了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中正则表达式匹配字符串的问题的主要内容,如果未能解决你的问题,请参考以下文章