正则expression式来从string中删除所有特殊字符?

我完全不能使用正则expression式,所以我需要帮助解决一个我认为最好通过正则expression式解决的问题。

我有C#中的string列表:

List<string> lstNames = new List<string>(); lstNames.add("TRA-94:23"); lstNames.add("TRA-42:101"); lstNames.add("TRA-109:AD"); foreach (string n in lstNames) { // logic goes here that somehow uses regex to remove all special characters string regExp = "NO_IDEA"; string tmp = Regex.Replace(n, regExp, ""); } 

我需要能够遍历列表并返回每个项目没有任何特殊字符。 例如,项目一将是“TRA9423”,项目二将是“TRA42101”,项目三将是TRA109AD。

有一个正则expression式可以为我做到这一点?

此外,该列表包含超过4000个项目,所以我需要search和replace,如果可能的话高效快捷。

预先感谢我收到的任何帮助。

编辑:对不起,我应该指定任何字符旁边的AZ,AZ和0-9在我的情况是特殊的。

这真的取决于你的特殊字符的定义。 我发现,在大多数情况下,白名单而不是黑名单是最好的方法:

 tmp = Regex.Replace(n, "[^0-9a-zA-Z]+", ""); 

您应该小心使用当前的方法,因为以下两项将被转换为相同的string,因此无法区分:

 "TRA-12:123" "TRA-121:23" 

这应该做到这一点:

 [^a-zA-Z0-9] 

基本上它匹配所有非字母数字字符。

[^a-zA-Z0-9]是一个匹配任何非字母数字字符的字符类。

或者, [^\w\d]也会做同样的事情。

用法:

 string regExp = "[^\w\d]"; string tmp = Regex.Replace(n, regExp, ""); 

您可以使用:

 string regExp = "\\W"; 

这相当于Daniel的“ [^a-zA-Z0-9]

W匹配任何非单词字符。 等同于Unicode分类[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]

根据你对“特殊字符”的定义,我认为“[^ a-zA-Z0-9]”可能会诀窍。 这会发现任何不是小写字母,大写字母或数字的东西。

 tmp = Regex.Replace(n, @"\W+", ""); 

\w匹配字母,数字和下划线, \W是否定版本。

为了我的目的,我想要所有的英文ASCII字符,所以这个工作。

 html = Regex.Replace(html, "[^\x00-\x80]+", "") 

如果你不想使用正则expression式,那么另一种select是使用

 char.IsLetterOrDigit 

你可以使用这个来循环每个string的字符,只有返回true。