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

本文关键字:一个 表达式 特殊字符 保留 任何非 数字 删除 | 更新日期: 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}-[#*%]]+"