Регулярное выражение: принимать строку буквально со специальными повторными символами

Может простой вопрос..

String text = "fake 43 60 fake";
String patt = "[43.60]";

Match m = Regex.Match(text, patt)

В этой ситуации m.Success = true, потому что точка заменяет любой символ (в том числе и пробел). Но я должен сопоставить строку буквально в patt.

Конечно, я могу использовать '\' перед точкой в ​​patt.

String patt = @"[43\.60]";

Таким образом, m.Success = false, но в мире регулярных выражений есть и другие специальные символы.

Мой вопрос в том, как я могу использовать регулярное выражение, чтобы строка была буквально взята, как она установлена. Таким образом, «43,60» должно точно совпадать с «43,60». «43–60» должно совпадать с «43–60»....

Спасибо.


person robertpnl    schedule 12.08.2011    source источник


Ответы (1)


Чтобы получить литерал, безопасный для регулярных выражений:

string escaped = Regex.Escape(input);

Например, чтобы соответствовать литералу [43.60]:

string escaped = Regex.Escape(@"[43.60]");

дает строку с содержимым: \[43\.60].

Затем вы можете использовать этот экранированный контент для создания регулярного выражения; Например:

string find = "43?60";
string escaped = Regex.Escape(find);
bool match = Regex.IsMatch("abc 43?60", escaped);

Обратите внимание, что во многих случаях вам потребуется объединить экранированную строку с каким-либо другим фрагментом регулярного выражения, чтобы создать законченный шаблон.

person Marc Gravell    schedule 12.08.2011