正则表达式删除特殊/不可见的字符

时间:2012-07-16 13:48:23

标签: c# regex character-encoding special-characters

问题是从域名中删除一些奇怪的字符,但保留特殊的unicode字符,如重音字母(德语,波兰语的丹麦语) 例如:radisson-blu.es,你看不到,但ss之间有额外的字符。 (尝试复制到记事本看看)。

我见过很多关于类似问题的帖子,但是每个解决方案都没有删除那个特殊字符,或者删除它,还有其他我需要保留的特殊字符。

4 个答案:

答案 0 :(得分:4)

用空字符串

替换正则表达式[^\w\s.,!@#$%^&*()=+~`-]

答案 1 :(得分:1)

你(不)看到的角色是U + 00AD Soft Hyphen。您可以使用\u00ad以正则表达式引用它,例如:

Regex.Replace(str, @"\u00ad", "");

但对于单字符替换,您也可以使用string.Replace

答案 2 :(得分:0)

'\xAD'是一个软连字符(代码点的名称为"SOFT HYPHEN")。

根据Unicode代码点数据库,其类别为"Cf"(或"Format"),因此可以与正则表达式@"\p{Cf}"匹配。

奇怪的是,Microsoft Visual C#2010 Express表示它与@"\p{Cf}"不匹配,而是匹配@"\p{Pd}""Dash Punctuation"),与普通连字符相同。

答案 3 :(得分:0)

这对我有用:

[\x00-\x1f]|[\x81\x8d\x8d\x8f\x90\x9d\xa0\u2060\uFEFF]