2012-11-26 3 views
-1

Мне нужна строка, приведенная ниже в regex.Регулярное выражение для соответствия * A * символов и необязательных значений ""

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

вам нужно сделать это 'string pattern = @" ({[0-9] +}) (= |> | <| \ * A \ *) ([a-z0-9] +) ";' –

ответ

3

Попробуйте это:

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

Вам необходимо, чтобы избежать второй * тоже. Также ваша строка ввода содержит буквы Unicode, которые не попадают в [a-z], поэтому вместо этого я использовал \p{L}, который соответствует всем буквам. Также вы не учитывали необязательные цитаты вокруг букв, поэтому я добавил два \"? вокруг правой части выражения. Для хранения выше в @ -quoted строке вам нужно сделать, повторять двойные кавычки дважды, как в:

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

У меня есть тенденция избежать всех символов, в то время как это может быть не обязательно.

+0

Привет @ Сина Ирванян отлично работает. Спасибо за ваше объяснение. – Gus

+1

+1, но вы можете избавиться от большинства этих обратных косых черт: '@" ({[0-9] +}) \ s + ([=><] | \ * A \ *) \ s + ""? ([ \ р {L} \ d] +) ""? "'. –

+0

@AlanMoore Да, вы правы. Это просто привычка. Я рад, что на C# есть строки с номерами @. В противном случае это было бы очень уродливо. –

Смежные вопросы