Как найти конкретный экземпляр слова без поддержки Lookbehind - PullRequest
1 голос
/ 27 марта 2019

https://regex101.com/r/55DgSB/2

Мне нужно найти значения 3 свойств, 'Path =', 'Size =' и 'Modified =' внутри этого выхода 7-Zip. Я использую VBScript.RegExp, поэтому (Положительный) Lookbehind не поддерживается. Я борюсь с «Path =», потому что он находится там дважды, и мне нужно иметь второй экземпляр (тот, что после 10 штрихов).

^((?<=-{10}\n)Path = |^Size = |^Modified = ).*

выше, очевидно, не работает, поскольку он использует Lookbehind для проверки на 10 штрихов. как решить?

1 Ответ

2 голосов
/ 27 марта 2019

Используйте группу без захвата, чтобы установить левый контекст, и используйте группу захвата, чтобы получить требуемый результат:

(?:-{10}\r?\nPath = |^Size = |^Modified = )(.*)
^--------- non-capturing group -----------^
                                           ^--^ - capturing group

См. Демонстрационную версию regex .

VBA demo:

Dim re, testString, colMatch, objMatch
Set re = New RegExp
With re
  .Pattern = "(?:-{10}\r?\nPath = |^Size = |^Modified = )(.*)"
  .Global = True
  .Multiline = True
  .IgnoreCase = True
End With
testString = "----------" & vbCrLf & "Path = some/path/here"

Set colMatch = re.Execute(testString)
For Each objMatch In colMatch
  Debug.Print objMatch.SubMatches(0)  ' <- The first submatch is your value
Next
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...