我需要下面的字符串在正则表达式中有效。
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个匹配。
答案 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]+)\""?";
我倾向于逃避所有符号,而可能没有必要。