后,我有一句话“Lorem存有悲标记词等等等等等等”VBA正则表达式的一切话
我只需要的话后(但不包括)“标记的话”。 '标记词'是句子中唯一保持不变的单词。
我成功找到了(?<=\bmarker words\s)(\w+)
,它不仅在vba中不起作用,而且还在标记词ex后返回一个单词:blah
,但我不确定如何将其扩展到字符串的其余部分(如果我在Excel外面工作)。我的研究表明,vba甚至不支持lookbehinds,所以我被卡住了。
后,我有一句话“Lorem存有悲标记词等等等等等等”VBA正则表达式的一切话
我只需要的话后(但不包括)“标记的话”。 '标记词'是句子中唯一保持不变的单词。
我成功找到了(?<=\bmarker words\s)(\w+)
,它不仅在vba中不起作用,而且还在标记词ex后返回一个单词:blah
,但我不确定如何将其扩展到字符串的其余部分(如果我在Excel外面工作)。我的研究表明,vba甚至不支持lookbehinds,所以我被卡住了。
VBA VBScript正则表达式不支持lookbehind构造。你只能靠捕捉:
\bmarker words\s+(.*)
的\bmarker words\s+
子模式匹配marker words
接着用1个或多个空格(S)和(.*)
子模式的匹配程度比一个换行,并将其放在一个捕获组,存储缓冲器,其中值可以是其它的零个或多个字符的全字用语言特定的方法进一步检索。
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
很好的答案,谢谢你的慷慨解释。 <3 – hale
请考虑接受它是否适合您。 –
尝试以下的正则表达式:
"(?:marker words)(.*?)$"
你的字符串应该是在第一组。
你的意思是你需要['\ bmarker words \ s +(。*)'](https://regex101.com/r/yE0gF8/2)? 'blah等等等等作为输出? (重新格式化) –
谢谢,这很好! – hale