VBA 对单词后的所有内容进行正则表达式
VBA regex everything after words
我有句子"lorem ipsum dolor marker words blah blah blah"
我只需要 (但不包括)'marker words' 之后的单词。 'Marker words' 是句子中唯一保持不变的单词。
我设法找到 (?<=\bmarker words\s)(\w+)
,它不仅在 vba 中不起作用,而且 returns 仅在标记词后的一个词前:blah
但我不确定如何将它扩展到字符串的其余部分(如果我要在 Excel 之外处理它)。我的研究表明 vba 甚至根本不支持后视,所以我被卡住了。
VBA VBScript 正则表达式不支持 lookbehind 构造。只能靠捕获:
\bmarker words\s+(.*)
\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
尝试以下正则表达式:
"(?:marker words)(.*?)$"
你的字符串应该在第一组。
我有句子"lorem ipsum dolor marker words blah blah blah"
我只需要 (但不包括)'marker words' 之后的单词。 'Marker words' 是句子中唯一保持不变的单词。
我设法找到 (?<=\bmarker words\s)(\w+)
,它不仅在 vba 中不起作用,而且 returns 仅在标记词后的一个词前:blah
但我不确定如何将它扩展到字符串的其余部分(如果我要在 Excel 之外处理它)。我的研究表明 vba 甚至根本不支持后视,所以我被卡住了。
VBA VBScript 正则表达式不支持 lookbehind 构造。只能靠捕获:
\bmarker words\s+(.*)
\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
尝试以下正则表达式:
"(?:marker words)(.*?)$"
你的字符串应该在第一组。