Удалить персонажей с помощью регулярных выражений

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

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

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

Regex.Replace(inputString, pattern, replacement);

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

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

11.12.2008 10:28:28
4 ОТВЕТА
РЕШЕНИЕ

Создайте шаблон, используя 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);
3
11.12.2008 10:50:48

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

\

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

\\
0
11.12.2008 10:29:44

Вы должны избегать персонажей с пространственным значением, конечно.

var str_to_replace = "removing \[this\]\(link\)";
0
11.12.2008 10:31:02

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

1
11.12.2008 10:39:03