Мне нужно выполнить следующее. У меня есть список разрешенных символов (это для QB Проблемы со специальными символами в QBO API v3 .NET SDK)
var goodChars = "ABCD...abcd...~_-...";
void string Sanitize(string input)
{
// TODO: Need to take input and replace all chars not included in "goodChars" with a space
}
Я знаю, как найти плохие символы с помощью RegEx, но это как бы наоборот, мне не нужно смотреть на совпадения. Мне нужно посмотреть, что не соответствует, и заменить только те.
Что вы хотите делать с «плохими» персонажами? Удалить их полностью? Regex.Replace(input,pattern,"")
будет работать
@PanagiotisKanavos "// TODO: нужно... заменить все символы, не входящие в "goodChars", на пробел"
string Sanitize(string input)
{
return new string(input.Select(x => goodChars.Contains(x)?x:' ').ToArray());
}
И, как предполагает вк 74, лучше иметь HashSet<char>
goodChars вместо строки для более быстрого поиска.
@ vc74 да, конечно, на самом деле я сосредоточился на своей части кода. но хорошо упомянуть об этом в ответе.
Вы можете использовать регулярное выражение с отрицательным шаблоном
const string pattern = "[^A-Za-z~_-]";
var regex = new Regex(pattern);
string sanitized = regex.Replace(input, " ");
Обратите внимание, что если этот код используется часто, вы можете сохранить регулярное выражение в статическом члене, чтобы избежать повторного создания (и перекомпиляции) для каждого вызова.
Вы смотрели на Regex.Replace ? Возможно, даже что-то столь же грубое, как
^[ABCD...abcd...~_-...]
, например, узор? Многие из этих символов можно заменить классами символов, чтобы сделать шаблон меньше, например,\d
может заменить0
на9
.A-Za-z
закроет английские буквы