Вы можете использовать
var pattern = @"(?:\s+|[@%&'()<>#])";
var result = Regex.Replace(searchParams.SearchForText, $@"^{pattern}|{pattern}$", "");
См. Полученное демо ^(?:\s+|[@%&'()<>#])|(?:\s+|[@%&'()<>#])$
regex .
Если вам нужно удалить все эти символы из начала и / или конец строки использовать
var result = Regex.Replace(searchParams.SearchForText, @"^[@%&'()<>#\s]+|[@%&'()<>#\s]+$", "");
См. это демонстрационное выражение регулярного выражения .
Здесь обратите внимание, что все отдельные альтернативные символы объединены в один символьный класс для более эффективного поиска. Их не нужно экранировать внутри символьного класса, поэтому шаблон еще чище.
Далее, поскольку \s+
соответствует одному или нескольким пробельным символам, его нельзя объединить с одиночными альтернативами в символьном классе. поэтому используется группа без захвата с чередованием, (?:...|...)
.
Якорь ^
делает первое совпадение ^{pattern}
только в начальной позиции строки, а якорь $
делает второе {pattern}$
альтернативное совпадение только в конце строки.
Поскольку pattern
должно повторяться дважды, оно объявляется как переменная, и регулярное выражение строится динамически.