Удалить персонажей с помощью регулярных выражений - PullRequest
1 голос
/ 11 декабря 2008

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

В настоящее время я использую ...

var inputString = "this is my original string.";
var replacement = "";
var pattern = string.Join("|", arrayOfStringsToRemove);

Regex.Replace(inputString, pattern, replacement);

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

Как мне это сделать? Есть ли лучший способ?

Ответы [ 4 ]

3 голосов
/ 11 декабря 2008

Построить шаблон с помощью Regex.Escape:

StringBuilder pattern = new StringBuilder();
foreach (string s in arrayOfStringsToRemove)
{
    pattern.Append("(");
    pattern.Append(Regex.Escape(s));
    pattern.Append(")|");
}
Regex.Replace(inputString, pattern.ToString(0, pattern.Length - 1), // remove trailing |
    replacement);
1 голос
/ 11 декабря 2008

Посмотрите на Regex.Escape

0 голосов
/ 11 декабря 2008

Конечно, вам нужно экранировать символы с пространственным значением.

var str_to_replace = "removing \[this\]\(link\)";
0 голосов
/ 11 декабря 2008

Вам нужно экранировать специальные символы с обратной косой чертой

\

Иногда вам может понадобиться использовать две обратные косые черты

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