C# 替换无效字符的正则表达式

C# 替换无效字符的正则表达式,c#,regex,C#,Regex,我对正则表达式没有太多的经验,所以我使用了许多链式String.Replace()调用来删除不需要的字符——有没有一个正则表达式可以简化这个过程 string messyText = GetText(); string cleanText = messyText.Trim() .ToUpper() .Replace(",", "") .Replace(":", "") .Replace(".", "") .

我对正则表达式没有太多的经验,所以我使用了许多链式String.Replace()调用来删除不需要的字符——有没有一个正则表达式可以简化这个过程

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

string messyText = GetText();
string cleanText = Regex.Replace(messyText.Trim().ToUpper(), @"[,:.;/\\\n\t\r ]+", "")
试试这个正则表达式:

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\]

您可能想使用白名单方法,因为有大量有趣的角色,其效果取决于组合可能不容易确定

一个简单的正则表达式可以删除除允许的字符以外的所有字符,如下所示:

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

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

@Kevingesner:使用@“…”,否则您的\t\r\n将被.NET转换为等效的空白。或者转义它们,但我认为@更可读。@quantumSoup,@Dinah:你不需要转义它们或使用
@
-等价的空白将很好地匹配。虽然一般来说,将逐字字符串与正则表达式一起使用是一个好主意。但这里没有必要。当然,他的代码确实替换了反斜杠(他(正确地)转义的唯一字符)。@Tim现在可以了,但不能没有逐字的字符串。@Tim Pietzcker:这一点很好;我的错误@kevingessner:因为要替换所有的空格,所以不需要
Trim()
。此外,空格、\n、\t和\r可以像Rogue一样一起替换为\s。@quantumSoup:没错,``在非逐字的字符串中不起作用。现在已经很晚了,我应该上床睡觉了……即使这不是你喜欢的编码惯例,如果你能将每个
.Replace()
放在一行新的内容上,这将有助于网站的可读性,这样就不会有一个大的水平卷轴。
\s
也包含
\v
\f
,但这些内容并不常用,所以这应该不是问题。你需要RegexOptions吗?多行还是你的regex会处理它?@Preet我相信
RegexOptions。多行
只影响字符串开始和结束锚的行为
^
$
,但我可能错了。第二个选项才是我真正想要的