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
2条答案
按热度按时间1bqhqjot1#
VBA提供了前瞻(正向和负向),但并不一致不向后看。
我见过的将Regex与VBA结合使用的最好例子是帕特里克马修斯的this article。
[使用
Execute
而不是Replace
更新示例]虽然我不完全清楚你的用法,但你可以使用这样的函数:
(
和)
中的模式是第一个子匹配)。要了解完整的模式,您可以参考explanation on regex101。
字符串
v1l68za42#
把^A放在一个非捕获组中,然后使用Match对象的SubMatches属性来获取匹配值,怎么样?