Страницы

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

воскресенье, 22 декабря 2019 г.

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

#c_sharp #регулярные_выражения


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

Как сделать чтобы переменные распознавались как обычный текст?
    


Ответы

Ответ 1



Используйте 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)));

Ответ 2



В таком случае я вижу только 1 способ: пройтись посимвольно по stringBefore и stringAfter и все символы, которые используются в регулярном выражении как зарезервированные, экранировать.

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

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