0

複雑なグループ化された正規表現がありますが、RegExp 5.5では、一致の部分一致が文字列として返されるため、.FirstIndexと.Lengthは公開されません。キャプチャされた文字列は一意ではありません。

正規表現:

([A-Z]+)\s+\[A-Z]?\s+(\d{3})\-(\d{3})\s+([A-Z]?)\-([A-Z]?)

テキストの例:

BLAHBLAH A 100-100 A-A    
BLAH 101-101   A-

出力:

0:BLAHBLAH           0:BLAH
1:100                1:101
2:100                2:101
3:A                  3:A
4:A                  4: 

現時点では、部分一致をループし、部分文字列を検索し、位置を見つけて、スペースに置き換えます。

Dim ub as Long: ub = MatchCollection.Matches(0).Submatches.Count-1
Dim fi() as Long, ln() as Long: Redim fi(ub): Redim ln(ub)

For i = 0 to ub
    fi(i) = Clng(Instr(1, Text, MatchCollection.Matches(0).Submatches(i))
    ln(i) = Clng(Len(MatchCollection.Matches(0).Submatches(i))

    Mid(Text, fi(i), ln(i)) = String$(ln(i), Chr(32))
Next i

Aの最初の出現は正規表現によってキャプチャされないため、これは明らかに最初のサンプル文字列では機能しません。

どんな考えでも大歓迎です!

4

1 に答える 1

0

わかりました、解決策を見つけました。ループでは、試合の前にすべての文字をクリアする必要があったため、代わりに:

Mid(Text, fi(i), ln(i)) = String$(ln(i), Chr(32))

必要だった:

Mid(Text, 1, (fi(i)-1)+ ln(i)) = String$(fi(i)-1+ln(i), Chr(32))
于 2013-03-20T15:26:18.710 に答える