2017-02-10 25 views
2

私は、この形式でテキストを持っています。配列を取得し正規表現のVBScriptキャプチャは先

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

:例えば

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

私のエディタ上で正常に動作しますが、エクセルVBA(vbscript.regex)でサポートされていない先読み

私ができる最善do:

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

ラベルを2番目のステップで何も置き換えないでください。

:(?m)(?< =^[BBBBB])。* $をvba正規表現エンジンに変換するのに便利ですか?

ありがとうございました。

David。

答えて

2

ここで肯定的なlookbehindは必要ありません。ここでの唯一の目的は、必要なマッチの左手のコンテキストを定義することであり、重複するマッチはありません。このように、あなたは安全に代わりかかるパターンを使用することができ、後でグループ1

利用

の内容をつかむために、 キャプチャ括弧で、パターンの残りの部分、または興味のある部分を囲みます
.Pattern = "^\[B{5}\]\s*([^\r\n]*)" 

.が試合から\rを除外する[^\r\n]に置き換え優れている、と{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。