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

424
11 мая 2017, 10:03

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

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

Answer 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)));
Answer 2

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

READ ALSO
Получить путь для папки ProgramFiles

Получить путь для папки ProgramFiles

этот код на 64 битной винде выдает путь до "C:\Program Files (x86)", а как получить путь до папки ProgramFiles?

232
Запись в скрытую сетевую папку

Запись в скрытую сетевую папку

Здравствуйте форумчане!

273
ICommand и получение ссылки на окно

ICommand и получение ссылки на окно

Добрый день, занялся реализацией кастомной командыРеализовал ICommand и все отлично работает, но возникла мысль, а хорошо бы получать данные...

245
Обработка doubleClick в заголовках и строках DataGrid WPF

Обработка doubleClick в заголовках и строках DataGrid WPF

Требуется по разному обрабатывать doubleClick по заголовку и по строкам в DataGridSelectedIndex не подходит, так как при doubleClick по заголовку в SelectedIndex находится...

284