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

3

我需要完成以下任务。我有一个允许的字符列表(这是为了 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
}

我知道如何使用正则表达式查找错误字符,但这就像反向操作,我不需要查看匹配项。我需要查看不匹配的内容,并仅替换那些不匹配的内容。


1
你看过Regex.Replace吗?也许甚至可以像^[ABCD...abcd...~_-...]这样粗暴的模式?很多这些字符都可以用字符类替换,以使模式更小,例如\d可以替换为09A-Za-z将涵盖英文字母。 - Panagiotis Kanavos
你想对“坏”字符做什么?完全删除它们吗?Regex.Replace(input,pattern,"")会起作用。 - Panagiotis Kanavos
1
@PanagiotisKanavos "// TODO: 需要...用空格替换所有不包含在“goodChars”中的字符" - Rufus L
2个回答

7

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

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

var regex = new Regex(pattern);
string sanitized = regex.Replace(input, " ");

演示

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


7
string Sanitize(string input)
{
    return new string(input.Select(x => goodChars.Contains(x)?x:' ').ToArray());
}

正如vc 74所建议的那样,使用HashSet<char>存储好的字符比使用字符串进行快速查找更好。


@vc74 当然,我实际上是在专注于我的代码部分。但在答案中提到它也是很好的。 - Ashkan Mobayen Khiabani

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接