Regex VbScript Захват впереди

У меня есть текст в этом формате:

[AAAAA]xyzxyzxyz
[AAAAA]abcdefghi
[AAAAA]whatever
[BBBBB]aaaaaaaa
[BBBBB]cccccccc
[BBBBB]dddddddd
[CCCCC]ffffffff
[CCCCC]eeeeeeee

Я хочу захватить в множественном выборе строку после метки, без метки.

(?m)(?<=^\[BBBBBB\]).*$ 

Чтобы получить массив с:

[1]aaaaaaaa
[2]cccccccc
[3]dddddddd

например, отлично работает в моем редакторе, но просмотр вперед не поддерживается в Excel VBA (vbscript.regex)

Лучшее, что я могу сделать, это:

 ((^\[BBBBBB\])(.*?)$) 

и замените метку ничем во втором шаге.

Существует ли хороший способ конвертировать: (? M)(?<=^[BBBBBB]).*$ В движок регулярных выражений vba?

Спасибо за помощь.

Дэвид.

2 ответа

Позитивный взгляд здесь не является необходимым, поскольку его единственная цель здесь - определить левый контекст для нужного вам соответствия, и нет совпадений. Таким образом, вместо этого вы можете безопасно использовать шаблон потребления и заключить остальную часть шаблона или интересующую вас часть в скобки, чтобы позднее получить содержимое группы 1.

использование

.Pattern = "^\[B{5}\]\s*([^\r\n]*)"

. лучше заменить на [^\r\n] исключить \r из матча, и {5} это более удобный способ написать 5 B s.

Полная демонстрация:

Sub DemoFn2()
   Dim re As RegExp
   Dim s As String
   Dim colMatch As MatchCollection, objMatch As Match

s = "[AAAAA]xyzxyzxyz" & vbCrLf & "[AAAAA] abcdefghi" & vbCrLf & "[AAAAA] whatever" & vbCrLf & "[BBBBB] aaaaaaaa" & vbCrLf & "[BBBBB] cccccccc" & vbCrLf & "[BBBBB] dddddddd" & vbCrLf & "[CCCCC] ffffffff" & vbCrLf & "[CCCCC] eeeeeeee"
Set re = New RegExp
With re
  .Pattern = "^\[B{5}\]\s*([^\r\n]*)"
  .Global = True              ' Same as /g at the online tester
  .MultiLine = True          ' Same as /m at regex101.com
End With

Set colMatch = re.Execute(s)
For Each objMatch In colMatch
  Debug.Print objMatch.SubMatches.Item(0)
Next
End Sub

Спасибо за ваш быстрый и полный ответ.

Я адаптирую вашу работу к контексту, но это работает!!! Спасибо за все объяснения.

Дэвид.

Другие вопросы по тегам