感谢
Replace chars if not match的答案,我创建了
一个辅助方法来去除不被接受的字符。
允许的模式应该是正则表达式格式,期望它们包含在方括号中。函数将在开方括号后插入一个波浪线。我预计它可能无法处理描述有效字符集的所有正则表达式,但它适用于相对简单的集合,这是我们正在使用的。
static public string ReplaceNotExpectedCharacters( this string text, string allowedPattern,string replacement )
{
allowedPattern = allowedPattern.StripBrackets( "[", "]" );
var result = Regex .Replace(text, @"[^" + allowedPattern + "]", replacement);
return result;
}
static public string RemoveNonAlphanumericCharacters( this string text)
{
var result = text.ReplaceNotExpectedCharacters(NonAlphaNumericCharacters, "" );
return result;
}
public const string NonAlphaNumericCharacters = "[a-zA-Z0-9]";
这里使用了我 StringHelper 类中的几个函数 http://geekswithblogs.net/mnf/archive/2006/07/13/84942.aspx。
public static string StripBrackets( this string str, string sStart, string sEnd)
{
if (CheckBrackets(str, sStart, sEnd))
{
str = str.Substring(sStart.Length, (str.Length – sStart.Length) – sEnd.Length);
}
return str;
}
public static bool CheckBrackets( string str, string sStart, string sEnd)
{
bool flag1 = (str != null ) && (str.StartsWith(sStart) && str.EndsWith(sEnd));
return flag1;
}
var result = Regex.Replace(text, @"[^\w]", m => "%&=?()".Contains(m.Value) ? "" : m.Value);
您可以用任何代码替换我的MatchEvaluator来确定是否保留字符。 - emfurry