2

C#、VS 2010 での正規表現の使用。コードは次のとおりです。

static string capturePattern = @"\|([!-|]{2})([!-|]{2})([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?([!-|]{2})?\|";

Regex rgx = new Regex(capturePattern);

string TS="!3829.87N/12033.82Wv169/000|!('d%*|"

MatchCollection matches = rgx.Matches(TS);

matches.Count は最終的に 1 になり、matches[0] は "|!('d%*|".

私は、matches.Count が 3 で、解析された文字列が次のようになることを期待していました。

matches[0] = "!("
matches[1] = "'d"
matches[2] = "%*"

私は何を間違えましたか?

チャック

4

2 に答える 2

1

正規表現は、バー間のすべてを|単一の一致にキャプチャします。括弧内の部品が必要な場合、それらは にありmatch[0].Groupsます。

Group[0]キャプチャ グループ全体です。グループ 1、2、およびオプションで 3 つ以上は、括弧内の文字ペアになります。

あなたの場合、matches.Count は 1 になり、matches[0].Groups.Count は 4 になり、次のようになります。

matches[0].Group[1] == "!(" 
matches[0].Group[2] == "'d" 
matches[0].Group[3] == "%*" 
于 2012-09-13T21:14:50.610 に答える
-1

regexPlanetはあなたの友達です。そこで式をテストしてください。

于 2012-09-13T21:04:01.680 に答える