正则表达式删除任何非字母数字,但在一个表达式中保留一些特殊字符

时间:2011-10-10 10:08:02

标签: c# regex

我有这个代码用“ - ”char替换所有非字母数字字符。

return Regex.Replace(strIn, @"[\W|_]+", "-", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);

但我需要更改它以允许传递一些特殊字符(一个或多个),例如:#,*,%

如何更改此正则表达式?

6 个答案:

答案 0 :(得分:4)

使用

[^\p{L}\p{N}#*%]+

匹配一个或多个既不是字母也不是数字的字符,也不匹配#*%中的任何字符。

答案 1 :(得分:2)

这个怎么样:

[^a-zA-Z0-9#*%]+

如果你正在使用unicode,你可以做(​​如Tim的回答):

[^\p{L}\p{N}#*%]+

答案 2 :(得分:2)

另一个选项,您可以使用字符类减法 info ,例如从字符类中删除#

[\W_-[#]]+

#之后添加其他已接受的特殊字符。这里的实例:http://rextester.com/rundotnet?code=YFQ40277

答案 3 :(得分:1)

使用此功能。

([^\w#*%]|_)

在%。

之后添加任何其他特殊字符

基本上是说,匹配任何不是(^)字符(\ w),#,*或%OR匹配_的字符。

答案 4 :(得分:1)

看来这种方式对你来说是最好的解决方案

@"(?!.*[^\w#*%])"

答案 5 :(得分:0)

您可以使用set subtraction:

@"[\W_-[#*%]]+"

这匹配所有非单词字符和下划线的集合,减去 #*%的集合。

请注意,您不必在字符类中使用|作为“或”,因为这是隐含的。实际上,正则表达式中的|只匹配|

另请注意,在.NET中,\w匹配除了下划线之外的其他一些“连接符标点”字符。如果您也想匹配其他字符,可以使用

@"[\W\p{Pc}-[#*%]]+"