-1

以下の文字列が正規表現で有効である必要があります。

string pattern = @"({[0-9]+}) (=|>|<|\*A*) ([a-z0-9]+)";
string input = "{123} = \"10\" || {12334} < 1000 || {8} > abcs || {34} *A* 33 || {22} *A* \"ábcd\"";

Regex rgx = new Regex(pattern, RegexOptions.Compiled);
MatchCollection matches = rgx.Matches(input);

if (matches.Count > 0)
{
    Console.WriteLine("{0} ({1} matches):", input, matches.Count);
    foreach (Match match in matches)
        Console.WriteLine("   " + match.Value);
}
else
    Console.WriteLine("Nothing" );

文字列(入力)のすべての場合に正規表現を機能させるにはどうすればよいですか?上記のコードは5つの一致を返す必要があります。

4

1 に答える 1

3

これを試してください:

(\{[0-9]+\})\s+(\=|\>|\<|\*A\*)\s+\"?([\p{L}\d]+)\"?

あなたも2番目を脱出する必要がありました*。また、入力文字列には分類されないUnicode文字が含まれている[a-z]ため、\p{L}代わりにすべての文字に一致するものを使用しました。また、文字を囲むオプションの引用符を考慮していなかったため\"?、式の右側に2つ追加しました。上記を@引用符で囲まれた文字列に格納するには、次のように二重引用符を2回繰り返す必要があります。

string pattern = @"(\{[0-9]+\})\s+(\=|\>|\<|\*A\*)\s+\""?([\p{L}\d]+)\""?";

必要ではないかもしれませんが、私はすべてのシンボルをエスケープする傾向があります。

于 2012-11-26T23:19:07.507 に答える