2016-03-07 1 views
2

У меня есть предложение «Lorem Ipsum Dolor маркерные слова бла-бла-бла»VBA регулярное выражение все после слов

мне нужно только слова после (но не включая) «маркерные слова». «Маркерные слова» - единственные слова в предложении, которые остаются неизменными.

Мне удалось найти (?<=\bmarker words\s)(\w+), который не только не работает в vba, но также возвращает только одно слово после слов маркера ex: blah, но я не уверен, как его распространить на остальную часть строки (если бы я работал над ним вне Excel). В моих исследованиях говорится, что vba даже не поддерживает lookbehinds, поэтому я застрял.

+0

Вы имеете в виду, что вам нужно ['\ bmarker words \ s + (. *)'] (Https://regex101.com/r/yE0gF8/2)? «бла-бла-бла» в качестве выхода? (переформатировано) –

+0

Спасибо, что отлично работает! – hale

ответ

0

Регулярное выражение 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 
+0

Отличный ответ, спасибо за щедрые объяснения. <3 – hale

+0

Пожалуйста, подумайте о принятии, если он сработает для вас. –

0

Попробуйте следующее регулярное выражение:

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

Ваша строка должна быть в первой группе.

Смежные вопросы