正则表达式匹配* A *字符和可选“”

时间:2012-11-26 23:10:02

标签: c# regex

我需要下面的字符串在正则表达式中有效。

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个匹配。

1 个答案:

答案 0 :(得分:3)

试试这个:

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

你也需要逃脱第二个*。此外,您的输入字符串包含不属于[a-z]的unicode字母,因此我使用\p{L}代替所有字母。此外,您没有考虑字母周围的可选引号,因此我在表达式的右侧添加了两个\"?。要将上述内容存储在@ -quoted字符串中,您需要重复两次双引号,如:

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

我倾向于逃避所有符号,而可能没有必要。