【问题标题】:VBA regex everything after wordsVBA正则表达式之后的一切
【发布时间】:2026-02-04 01:05:02
【问题描述】:
我有句“lorem ipsum dolor marker words blah blah blah”
我只需要之后(但不包括)“标记词”。 “标记词”是句子中唯一保持不变的词。
我设法找到了(?<=\bmarker words\s)(\w+),它不仅在 vba 中不起作用,而且在标记词 ex 之后也只返回一个词:blah 但我不确定如何将其扩展到其余部分字符串(如果我要在 Excel 之外处理它)。我的研究表明 vba 甚至根本不支持后视,所以我被卡住了。
【问题讨论】:
标签:
regex
excel
csv
regex-lookarounds
vba
【解决方案1】:
VBA VBScript 正则表达式不支持lookbehind 构造。你只能依靠捕获:
\bmarker words\s+(.*)
见regex demo
结果在SubMatches collection中。
\bmarker words\s+ 子模式匹配整个单词 marker words 后跟 1 个或多个空格,(.*) 子模式匹配除换行符以外的零个或多个字符,并将其放入捕获组、内存缓冲区、可以使用特定于语言的方法进一步检索该值。
VBA 代码:
Sub CaptureSubstring()
Dim str As String
Dim objMatches As Object
str = "lorem ipsum dolor marker words blah blah blah"
Set objRegExp = CreateObject("VBScript.RegExp") ' Declare the RegExp object
objRegExp.Pattern = "\bmarker words\s+(.*)" ' Set pattern
Set objMatches = objRegExp.Execute(str) ' Execute the regex match
If objMatches.Count <> 0 Then ' Check the result
Debug.Print objMatches.Item(0).SubMatches.Item(0) ' Print Match 1, Submatch 1
' > blah blah blah
End If
End Sub
【解决方案2】:
尝试以下正则表达式:
"(?:marker words)(.*?)$"
你的字符串应该在第一组。