2012-04-27 12 views
2

次の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 = 
になりたかったですその場合は

です。

答えて

1

?あなたは

.|\sオプションになりたい要素が同様に改行を一致させるには空白だけでなく.マッチ

以来.に置き換えることができた後、あなたは単一行オプションにRegex regex = new Regex(@"test1=(?<test1>(\d+))((.)+?)(test2=(?<test2>(\d+)))?",RegexOptions.Singleline);

を渡す必要があり(オデッドによってソリューションですこのすべて)

+0

ありがとうございます。上記の私のコメントをご覧ください。 – ShamilS

+0

新しい行(文字)をスキップするだけでなく、任意の文字を使用するには(。| \ s)を使用します。だけで十分ではないようだ。 – ShamilS

+0

@ShamilS: '.'クラスが改行にマッチするようにするには、あなたの正規表現の" DOTALL "オプションをオンにしてください。 (これはPythonでは 're.DOTALL'ですが、これは' s'オプションです。)C#では –

5

は全体test2グループがオプションであることを修飾しない:

@"test1=(?<test1>(\d+))((.|\s)+?)(test2=(?<test2>(\d+)))?" 
MSDNから

からRegular Expression Language - Quick Reference

? - 前の要素とゼロまたは1回一致します。

+0

ありがとうございました。私のRegEx表現に疑問符を追加すると、ここに私のテストランが表示され、 'test1'要素も 'test2' 。 – ShamilS

+0

@ShamilS - 申し訳ありませんが、私は「?」を間違って配置しました – Oded

+0

@ShamilS - 私はそれを読むことができませんおそらくあなたの質問を編集してそこに追加してください? – Oded

関連する問題