次のC#RegEx式で 'test2'をオプション要素にする方法 'test2'要素が見つからない場合、 'test1'値が正しく解析されていますか?C#RegEx一致式のオプション要素
StringBuilder sb = new StringBuilder();
sb.AppendLine(" test1=123 any text in between ");
sb.AppendLine(" some ");
sb.AppendLine(" more ");
sb.AppendLine(" text in between ");
sb.AppendLine(" test2=456 ");
sb.AppendLine(" test1=789 some text .. test2=012 ");
Regex regex = new Regex(@"test1=(?<test1>(\d+))((.|\s)+?)(test2=(?<test2>(\d+)))");
MatchCollection matches = regex.Matches(sb.ToString());
foreach (Match match in matches)
{
Group test1 = match.Groups["test1"];
Group test2 = match.Groups["test2"];
System.Console.WriteLine("Test1 = {0}, Test2 = {1}", test1.Value, test2.Value);
}
ありがとうございます。
は@Odedは - 私はコメントを適切にフォーマットされ得ることができないように私はここに答えると私の回答はStackOverflowのコメントテキストの長さによって許可さよりも長いよう:
ありがとうございました。 2番目の返信で提案されたRegEx式の結果は次のようになります。
Test1 = 123, Test2 =
Test1 = 789, Test2 =
これは正しくありません。
Test1 = 123, Test2 = 456
Test1 = 789, Test2 = 012
テスト出力で そして、あなたの最初の応答正規表現式の結果。それは正しいです。
しかし、私は
sb.AppendLine(" test1=789 some text .. test52=012 ");
に
sb.AppendLine(" test1=789 some text .. test2=012 ");
を変更した場合、テスト結果出力は、ちょうど1行
Test1 = 123, Test2 = 456
を持っていますし、私はそれが
Test1 = 123, Test2 = 456
Test1 = 789, Test2 =
になりたかったですその場合は
です。
ありがとうございます。上記の私のコメントをご覧ください。 – ShamilS
新しい行(文字)をスキップするだけでなく、任意の文字を使用するには(。| \ s)を使用します。だけで十分ではないようだ。 – ShamilS
@ShamilS: '.'クラスが改行にマッチするようにするには、あなたの正規表現の" DOTALL "オプションをオンにしてください。 (これはPythonでは 're.DOTALL'ですが、これは' s'オプションです。)C#では –