【问题标题】:Replace all non-supported chars with a space用空格替换所有不支持的字符
【发布时间】:2019-04-08 16:00:28
【问题描述】:

我需要完成以下工作。我有允许的字符列表(这是给 QB Issues with special characters in 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了吗?也许甚至像^[ABCD...abcd...~_-...] 这样粗暴的模式?很多这些字符可以被字符类替换以使模式更小,例如\d 可以将0 替换为9A-Za-z 将覆盖英文字母
  • 你想对“坏”字符做什么?完全删除它们? Regex.Replace(input,pattern,"") 会工作
  • @PanagiotisKanavos "// TODO: 需要……用空格替换所有未包含在“goodChars”中的字符“

标签: c# .net string


【解决方案1】:
string Sanitize(string input)
{
    return new string(input.Select(x => goodChars.Contains(x)?x:' ').ToArray());
}

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

【讨论】:

  • @vc74 是的,当然,我实际上专注于我的代码部分。但最好在答案中提及它。
【解决方案2】:

您可以使用带有否定模式的Regex

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

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

Fiddle

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

【讨论】:

    猜你喜欢
    • 2012-09-01
    • 2013-11-22
    • 2012-01-31
    • 2012-10-11
    • 1970-01-01
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    • 2012-12-16
    相关资源
    最近更新 更多