我有这个代码用“ - ”char替换所有非字母数字字符。
return Regex.Replace(strIn, @"[\W|_]+", "-", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
但我需要更改它以允许传递一些特殊字符(一个或多个),例如:#,*,%
如何更改此正则表达式?
答案 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}-[#*%]]+"