VBA正则表达后的所有内容

时间:2016-03-07 22:05:54

标签: regex excel-vba csv regex-lookarounds vba

我有一句话" lorem ipsum dolor marker words blah blah blah"

我只需要之后的(但不包括)'标记词'。 '标记词'是句子中唯一保持不变的词。

我设法找到scope: { myDico: '=' } ,它不仅在vba中不起作用,而且在标记词ex:(?<=\bmarker words\s)(\w+)之后也只返回一个单词,但我不确定如何将其扩展到字符串的其余部分(如果我在Excel之外处理它)。我的研究表明,vba甚至根本不支持lookbehinds,所以我被卡住了。

2 个答案:

答案 0 :(得分:1)

VBA VBScript正则表达式不支持lookbehind构造。您只能依赖捕获

\bmarker words\s+(.*)

请参阅regex demo

结果位于SubMatches collection

\bmarker words\s+子模式匹配整个单词marker words,后跟一个或多个空格,(.*)子模式匹配除换行符之外的零个或多个字符并将其置于捕获中group,一个内存缓冲区,可以使用特定于语言的方法进一步检索该值。

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

答案 1 :(得分:0)

尝试以下正则表达式:

"(?:marker words)(.*?)$"

你的字符串应该在第一组。