如何使用 Regex 或 StringBuilder 转义外来字符?

How do I Escape Foreign Characters using Regex or StringBuilder?

我有以下清理字符串的方法:

public static String UseStringBuilderWithHashSet(string strIn)
    {
        var hashSet = new HashSet<char>("?&^$#@!()+-,:;<>’\'-_*");
        // specify capacity of StringBuilder to avoid resizing
        StringBuilder sb = new StringBuilder(strIn.Length);
        foreach (char x in strIn.Where(c => !hashSet.Contains(c)))
        {
            sb.Append(x);
        }
        return sb.ToString();
    }

但是,[MV] REOL ちるちる ChiruChiru[MV] REOL ヒビカセ Hibikase 等字符串不会被清理。

我如何修改我的方法,以便它可以将上述字符串之一转换为例如: [MV] REOL ChiruChiru

您正试图通过过滤掉所有不需要的内容来彻底解决此问题。这不是最佳选择,因为它们有 100,000 多个可能的字符。

如果你只接受你想要的,你可能会找到更好的结果。

public static string CleanInput(string input)
{
    //a-zA-Z allows any English alphabet character upper or lower case
    //\[ and \] allows []
    //\s allows whitespace
    var regex = new Regex(@"[a-zA-Z\[\]\s]");
    var stringBuilder = new StringBuilder(input.Length);
    foreach(char c in input){
        if(regex.IsMatch(c.ToString())){
            stringBuilder.Append(c);
        }
    }
    string output = stringBuilder.ToString();
    //\s+ will match on any duplicate spaces and replace it with
    //a single space.
    return Regex.Replace(output , @"\s+", " ");
}