我对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(" ", "");
由于
答案 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)
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_]", "");
^除了此正则表达式允许的字母数字字符外,还可以反转选择,。和_您可以根据需要添加和删除字符和字符集。