Как обрабатывать регулярные выражения как простой текст при использовании .Net Regex Class? - PullRequest
0 голосов
/ 01 августа 2011

Как автоматически экранировать все символы регулярных выражений, используя встроенный механизм .NET или что-то подобное?

Я использую класс Regex, чтобы найти соответствие для регулярного выражения. Смотрите пример ниже.

string pattern = "abc";
Regex regexp = new Regex(@"a\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

Итак, вот найденный попадет.

Теперь, в некоторых случаях, я все еще хочу использовать класс Regex, но обрабатывать регулярные выражения как обычную строку. Так, например, я изменю шаблонную строку на @ "a \ w", и класс Regex должен найти совпадение.

string pattern = @"a\w";
Regex regexp = new Regex(@"a\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

В вышеприведенном случае также должен быть найден «Found». Итак, вопрос в том, как преобразовать или обработать регулярное выражение в / как обычную строку или что-то в этом роде, которое можно использовать в классе Regex? Как реализовать приведенный выше фрагмент кода?

Примечание: - Я не хочу использовать string.Contains, string.IndexOf и т. Д. Для сопоставления строк в виде простого текста.

Ответы [ 3 ]

2 голосов
/ 01 августа 2011

Вы можете "de-regex" вашей строки через Regex.Escape .Это преобразует ваш шаблон для поиска в правильно экранированную версию регулярного выражения.

string pattern = @"a\w";
Regex regexp = new Regex(Regex.Escape(@"a\w"), RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}
1 голос
/ 01 августа 2011

во втором случае вы не хотите искать, что означает \w в регулярном выражении, вы хотите искать литерал \w, поэтому вам нужно:

string pattern = @"a\w";
Regex regexp = new Regex(@"a\\w", RegexOptions.None);
if (regexp.IsMatch(pattern))
{
    MessageBox.Show("Found");
}

(обратите внимание на побег)

0 голосов
/ 01 августа 2011

Вам просто нужно экранировать свои специальные символы, такие как: @"a\\w"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...