我完全没有正则表达式,所以我需要一些帮助来解决我认为最好通过使用正则表达式来解决的问题.
我在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, "");
}
Run Code Online (Sandbox Code Playgroud)
我需要能够遍历列表并返回每个项目而没有任何特殊字符.例如,第一项是"TRA9423",第二项是"TRA42101",第三项是TRA109AD.
是否有正则表达式可以为我完成此操作?
此外,该列表包含超过4000个项目,因此我需要搜索和替换,以尽可能高效和快速.
编辑:我应该指定az,AZ和0-9旁边的任何字符在我的环境中都是特殊的.
Mar*_*ers 105
这实际上取决于你对特殊字符的定义.我发现在大多数情况下,白名单而不是黑名单是最好的方法:
tmp = Regex.Replace(n, "[^0-9a-zA-Z]+", "");
Run Code Online (Sandbox Code Playgroud)
您应该小心当前的方法,因为以下两个项目将转换为相同的字符串,因此无法区分:
"TRA-12:123"
"TRA-121:23"
Run Code Online (Sandbox Code Playgroud)
Mik*_*keD 16
[^a-zA-Z0-9]
是一个字符类匹配任何非字母数字字符.
或者,[^\w\d]
做同样的事情.
用法:
string regExp = "[^\w\d]";
string tmp = Regex.Replace(n, regExp, "");
Run Code Online (Sandbox Code Playgroud)
您可以使用:
string regExp = "\\W";
Run Code Online (Sandbox Code Playgroud)
这相当于丹尼尔的" [^a-zA-Z0-9]
"
\ W匹配任何非单词字符.相当于Unicode类别[^\p{Ll}\p{Lu}\p{Lt}\p{Lo}\p{Nd}\p{Pc}]
.
小智 5
出于我的目的,我想要所有英文 ASCII 字符,所以这有效。
html = Regex.Replace(html, "[^\x00-\x80]+", "")
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
204849 次 |
最近记录: |