正则表达式替换无效字符

我没有太多使用RegEx的经验,所以我使用许多链式String.Replace()调用来删除不需要的字符 – 我可以写一个RegEx来简化这个吗?

string messyText = GetText(); string cleanText = messyText.Trim() .ToUpper() .Replace(",", "") .Replace(":", "") .Replace(".", "") .Replace(";", "") .Replace("/", "") .Replace("\\", "") .Replace("\n", "") .Replace("\t", "") .Replace("\r", "") .Replace(Environment.NewLine, "") .Replace(" ", ""); 

谢谢

试试这个正则表达式:

 Regex regex = new Regex(@"[\s,:.;/\\]+"); string cleanText = regex.Replace(messyText, "").ToUpper(); 

\s是一个等同于[ \t\r\n]的字符类。


如果您只想保留字母数字字符,而不是将现有的每个非字母数字字符添加到字符类中,您可以这样做:

 Regex regex = new Regex(@"[\W_]+"); string cleanText = regex.Replace(messyText, "").ToUpper(); 

其中\W是任何非单词字符(不是[^a-zA-Z0-9_] )。

拯救人物类 !

 string messyText = GetText(); string cleanText = Regex.Replace(messyText.Trim().ToUpper(), @"[,:.;/\\\n\t\r ]+", "") 

你可能想要使用白名单方法,有一个有趣的角色海洋,其效果取决于组合可能不容易想象。

除了允许的字符之外,删除所有内容的简单正则表达式可能如下所示:

 messyText = Regex.Replace(messyText, @"[^a-zA-Z0-9\x7C\x2C\x2E_]", ""); 

除了这个正则表达式允许的字母数字字符外,^用于反转选择 ,。 和_您可以根据需要添加和删除字符和字符集。