0

テキスト ファイルを 1 行ずつ解析しています。複数の一致コレクションを作成し、処理された各行で複数の一致を試行するにはどうすればよいですか?

現在、私はこれを試しています:

while ((line = reader.ReadLine()) != null) {

string match1 = @"\s+([^)]*):entry:\s+cust\(([^)]*)\)\s+custno\(([^)]*)\)\s+id\(([^)]*)\)\s+name\(([^)]*)\)";
string match2 = @"group\(([^)]*)\)\s+spec\(([^)]*)\)\s+goodtill([^)]*)$";
string match3 = @"returns\(([^)]*)\)";

MatchCollection matches = Regex.Matches(line, match1);
MatchCollection matches2 = Regex.Matches(line, match2);
MatchCollection matches3 = Regex.Matches(line, match3);




foreach (Match matchr1 in matches)
{

    line1.Add("Date:" + matchr1.Groups[1].Value + ", Customer:"
                    + matchr1.Groups[2].Value + ", CustID:" + matchr1.Groups[3].Value +
                    ", ID:" + matchr1.Groups[4].Value + ", Name:" + matchr1.Groups[5].Value);
}

foreach (Match matchr2 in matches2)
{

    line2.Add("Group:" + matchr2.Groups[1].Value + ", Spec:" + matchr2.Groups[2].Value + ", Good Till:" + matchr2.Groups[3].Value);
}

foreach (Match matchr3 in matches3)
{

    line3.Add("Returns: " + matchr3.Groups[1].Value);
}

}

ファイルを処理し、arraylist のサイズをカウントしようとした後:

MessageBox.Show(line1.Count + " " + line2.Count + " " + line3.Count);

5000 0 0 を受け取りました。最後の 2 つの配列リストが空なのはなぜですか? 多くの一致があるはずです。正規表現が正しいことが確認されています。

サンプルデータ:

LUCIE:496 27AUG120755:entry: cust(GUIR) custno(j010705) id(293746) name(mike)
LUCIE:496 27AUG120755:       group(0000) spec(03) stripdn(N) pre228(N)       goodtill 01/MAR/08
LUCIE:496 27AUG120755:getprotcode given (m000029374603MAR08), returns (TUUjFDEO)
4

1 に答える 1

0

データをリテラルにする場合は、2 番目と 3 番目の正規表現で不足しているコンポーネントを要求する必要があります。または、変数の場合は、塗りつぶしを追加するだけです.*?

 group
 \(
   ( [^)]* )
 \)
 \s+ spec
 \(
   ( [^)]* )
 \)
  # missing :
  #      \s+ stripdn
  #      \(
  #        ( [^)]* )
  #      \)
  #      \s+ pre228
  #      \(
  #        ( [^)]* )
  #      \)

 \s+ goodtill
 ( [^)]* )
 $


 returns
  # missing a \s* here
 \(
     ( [^)]* )
 \)


LUCIE:496 27AUG120755:entry: cust(GUIR) custno(j010705) id(293746) name(mike)
LUCIE:496 27AUG120755:       group(0000) spec(03) stripdn(N) pre228(N)       goodtill 01/MAR/08
LUCIE:496 27AUG120755:getprotcode given (m000029374603MAR08), returns (TUUjFDEO)
于 2012-07-10T20:45:33.933 に答える