正则表达式替换无效字符

时间:2010-10-07 21:20:20

标签: c# regex

我对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(" ", "");

由于

3 个答案:

答案 0 :(得分:13)

试试这个正则表达式:

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_])。

答案 1 :(得分:2)

Character classes救援!

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

答案 2 :(得分:0)

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

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

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

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