删除任何非字母数字,但在一个表达式中保留一些特殊字符
本文关键字:一个 表达式 特殊字符 保留 任何非 数字 删除 | 更新日期: 2023-09-27 18:10:46
我有这段代码,用"-"字符替换所有非字母数字字符。
return Regex.Replace(strIn, @"['W|_]+", "-", RegexOptions.IgnorePatternWhitespace | RegexOptions.IgnoreCase);
,但我需要改变它,允许传递一些特殊字符(一个或多个),例如:#,*,%
如何改变这个正则表达式?
使用
[^'p{L}'p{N}#*%]+
匹配一个或多个字符,这些字符既不是字母也不是数字,也不是#
、*
或%
中的任何一个。
另一个选项,您可以使用字符类减法info,例如从字符类中删除#
:
['W_-[#]]+
只需在#
之后添加其他可接受的特殊字符。下面是一个实例:http://rextester.com/rundotnet?code=YFQ40277
这个怎么样:
[^a-zA-Z0-9#*%]+
如果你正在使用unicode,你可以这样做(作为Tim的回答):
[^'p{L}'p{N}#*%]+
用这个
([^'w#*%]|_)
在%后添加任何其他特殊字符。
它基本上是说,匹配任何不是(^)单词字符('w), #, *或%的字符,或者匹配_.
看来这是你最好的解决办法了
@"(?!.*[^'w#*%])"
您可以使用set减法:
@"['W_-[#*%]]+"
匹配所有非单词字符和下划线的集合,减去 #
, *
和%
的集合。
注意,您不必为字符类中的"或"使用|
,因为这是隐含的。事实上,你的正则表达式中的|
只匹配|
。
还要注意,在。net中,'w
除了下划线之外还匹配其他一些"连接器标点符号"字符。如果您也想匹配其他字符,您可以使用
@"['W'p{Pc}-[#*%]]+"