Кажется, что самый короткий способ состоит в объединении LINQ и string.Concat
:
var input = @"My name @is ,Wan.;'; Wan";
var chrs = new[] {'@', ',', '.', ';', '\''};
var result = string.Concat(input.Where(c => !chrs.Contains(c)));
// => result = "My name is Wan Wan"
См. демонстрацию C # . Обратите внимание, что string.Concat
является ярлыком к string.Join("", ...)
.
Обратите внимание, что использование регулярного выражения для удаления отдельных известных символов по-прежнему можно динамически строить, хотя считается, что регулярное выражение работает медленнее. Тем не менее, вот способ создания такого динамического регулярного выражения (где все, что вам нужно, это класс символов):
var pattern = $"[{Regex.Escape(new string(chrs))}]+";
var result = Regex.Replace(input, pattern, string.Empty);
См. еще одну демонстрацию C # . Регулярное выражение будет выглядеть как [@,\.;']+
(сопоставление одного или нескольких (+
) последовательных вхождений символов @
, ,
, .
, ;
или '
), где точка не должна быть экранирована, но Regex.Escape
будет необходимо, чтобы избежать других символов, которые должны быть экранированы, например \
, ^
, ]
или -
, чья позиция внутри класса символов, которую вы не можете предсказать .