2017-02-10 14 views
2

У меня есть текст с этим форматом:Regex VBSCRIPT Capturing вперед

[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)

Лучшее, что я могу do:

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

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

Это хороший способ конвертировать: (? M) (? < =^[BBBBBB]). * $ To vba regex engine?

Благодарим за помощь.

David.

ответ

2

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

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

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

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

Полное демо:

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 
0

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

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

David.