Страницы

Поиск по вопросам

среда, 14 ноября 2018 г.

Переменные в регулярных выражениях

Господа, шаблон рег. выражения состоит из трех частей - переменная, рег. выражение, переменная, например stringBefore + @"([\w]+)" + stringAfter Всё бы хорошо, но в stringAfter помимо букв есть открывающая скобка и Regex думает, что это часть регулярного выражения, и поэтому выкидывается ошибка "Нет парных закрывающих скобок".
Как сделать чтобы переменные распознавались как обычный текст?


Ответ

Используйте Regex.Escape()
Преобразует минимальный набор символов (\, *, +, ?, |, {, [, (, ), ^, $, , # и пробел), заменяя их соответствующими escape-кодами. При этом обработчику регулярных выражений дается команда интерпретировать эти символы буквально, а не как метасимволы.
Пример объявления:
var reg = new Regex($@"{Regex.Escape(stringBefore)}(\w+){Regex.Escape(stringAfter)}");
В старших версиях C# можно использовать аналогичный
var reg = new Regex(string.Format(@"{0}(\w+){1}", Regex.Escape(stringBefore), Regex.Escape(stringAfter)));

Комментариев нет:

Отправить комментарий