0

行の先頭から始まり、空白の最初の遭遇で終わる、文字列から最初の 3 ~ 13 文字を引き出す必要があります。

次のコードは動作しません。「無効な手順」エラーがよく発生します。パターンを変更するとエラーが解消されることがありますが、必要な一致が得られることはありません。

助けてください。

編集: このパターン "/[^ ]*/" を見つけましたが、これは私がやりたいことを実行するはずですが (私は思う)、コードを実行すると strOut = match.SubMatches(0) 行でエラーが発生します。理由はありますか?

    ' Set the pattern to find the data we would like to test; 
re_Name.Pattern = "^xe\-1/1/1"
re_Name.IgnoreCase = True
re_Name.Multiline = True

vLines = Split(strNames, vbcrlf)
For Each strLine in vLines
Set matches = re_Name.Execute(strLine)
    For Each match in matches
        strOut = match.SubMatches(0)
        MsgBox strOut
        Next
    Next

私が探しているものの例:

xe-0/1/1
xe-0/3/2.0
ge-11/2/1
ae0
ae0.3156

コンテキストでの好みの例:

xe-0/0/0        up    up   xxxxxxxxxxJxx0/0xToxBBxxx1 x;
ae0.202         up    up   ;xxxxxx1;xxxxxxxxixxxxx 
ge-11/3/0.0     up    down Rxxxxxxx RESERVEDing
4

2 に答える 2

2

ブラケットを使用して何もキャプチャしていないため、サブマッチをキャプチャしていないため、そうstrOut = match.SubMatches(0)あるべきだと思います。strOut = match.Value

文字を最初のスペースまで一致させたい場合は、使用できます

 re_Name.Pattern = "^\S+"

\Sスペース以外の任意の文字に一致します。

于 2013-01-30T18:57:47.837 に答える
1

あなたの正規表現には、サブマッチを可能にするための () のキャプチャがありません。スペースで Split を使用すると、おそらくリスクの少ないアプローチになります。

于 2013-01-30T18:58:26.150 に答える