Обновление: после прочтения комментария к вопросу, я думаю, что вы просто хотите:
s = Regex.Replace(s, "[~#%&*{}/<>?|\"-]+", "");
Старый ответ: я думаю, когда вы пишете *
, вы думаете о подстановочных знаках, таких каквы должны ввести в оболочке:
*. txt
Это не то, как *
работает в синтаксисе регулярных выражений.Вместо этого вы, вероятно, захотите: .*
:
".*[~#%&*{}/<>?|\"-]+.*"
.
означает «любой символ», а *
означает «ноль или более от предыдущего».
Внутрикласс символов [...]
*
теряет свое особое значение и становится буквальным символом, поэтому его не нужно экранировать.Необязательный выход из класса персонажа не причинит никакого вреда, и некоторым людям легче читать.