繁体   English   中英

正则表达式从字符串中删除所有特殊字符?

[英]Regex to remove all special characters from string?

我完全没有正则表达式,所以我需要一些帮助来解决我认为最好通过使用正则表达式来解决的问题。

我在C#中有字符串列表:

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。

是否有正则表达式可以为我完成此操作?

此外,该列表包含超过4000个项目,因此我需要搜索和替换,以尽可能高效和快速。

编辑:我应该指定az,AZ和0-9旁边的任何字符在我的环境中都是特殊的。

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

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

您应该小心当前的方法,因为以下两个项目将转换为相同的字符串,因此无法区分:

"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";

这相当于丹尼尔的“ [^a-zA-Z0-9]

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

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

为了我的目的,我想要所有的英文ASCII字符,所以这很有效。

html = Regex.Replace(html, "[^\x00-\x80]+", "")
tmp = Regex.Replace(n, @"\W+", "");

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

如果您不想使用Regex,则使用另一个选项

char.IsLetterOrDigit

您可以使用它来循环遍历字符串的每个字符,并且仅在返回时返回true。

public static string Letters(this string input)
{
    return string.Concat(input.Where(x => char.IsLetter(x) && !char.IsSymbol(x) && !char.IsWhiteSpace(x)));
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM