用空格替换所有不受支持的字符

kat*_*tit 3 .net c# string

我需要完成以下工作。我有允许的字符列表(这是QBO API v3 .NET SDK中带有特殊字符的 QB 问题

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
}
Run Code Online (Sandbox Code Playgroud)

我知道如何用RegEx查找坏字符,但这就像倒退一样,我不需要查看匹配项。我需要查看不匹配的内容,并仅替换那些不匹配的内容。

Ash*_*ani 7

string Sanitize(string input)
{
    return new string(input.Select(x => goodChars.Contains(x)?x:' ').ToArray());
}
Run Code Online (Sandbox Code Playgroud)

正如vc 74所建议的那样,最好有一个HashSet<char>goodChars而不是字符串,以加快查找速度


vc *_* 74 6

您可以使用带有负模式的正则表达式

const string pattern = "[^A-Za-z~_-]";

var regex = new Regex(pattern);
string sanitized = regex.Replace(input, " ");
Run Code Online (Sandbox Code Playgroud)

小提琴

请注意,如果经常使用此代码,则可以将正则表达式存储在静态成员中,以避免为每次调用重新创建(和重新编译)。