如何使用 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+", " ");
}
我有以下清理字符串的方法:
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+", " ");
}