有没有办法在VBA正则表达式中进行负向和正向后顾?
我想要的是,如果字符串以"A"开头,就不匹配。目前我是在模式的开头使用^A,然后去掉匹配(0)的第一个字符。显然这不是最好的方法!
我正在使用regExp对象。
我想要的是,如果字符串以"A"开头,就不匹配。目前我是在模式的开头使用^A,然后去掉匹配(0)的第一个字符。显然这不是最好的方法!
我正在使用regExp对象。
VBA提供了前瞻(正和负)的功能,但它不太一致地没有后顾功能。
在我看过的使用Regex与VBA最好的示例是Patrick Matthews的这篇文章。
[使用Execute
更新示例而不是Replace
]
虽然我对你的用法不完全清楚,但你可以使用以下函数:
(
和)
内的模式是第一个子匹配)。要理解完整的模式,您可以参考regex101上的解释。
Sub TestString()
MsgBox ReducedText("cfat dcat")
' results in: fat cat
MsgBox ReducedText("Sat all over the hat again")
' results in: at ver he at
End Sub
Function ReducedText(strIn As String) As String
Dim objRegex As Object
Dim objRegMC As Object
Dim objRegM As Object
Dim strOut As String
Set objRegex = CreateObject("vbscript.regexp")
With objRegex
.IgnoreCase = True
'not needed if matching the whole string
.Global = True
.Pattern = "\b[^a\s]([a-z]+)"
If .test(strIn) Then
Set objRegMC = .Execute(strIn)
For Each objRegM In objRegMC
strOut = strOut & objRegM.submatches(0) & vbNewLine
Next
ReducedText = strOut
Else
ReducedText = "Starts with A"
End If
End With
End Function
把 ^A 放在一个非捕获组中,并使用匹配对象的 SubMatches 属性来获取您的匹配值,这个想法怎么样?