正则表达式去除特殊/不可见字符
问题是从域名中删除一些奇怪的字符,但保留特殊的Unicode字符,如重音字母(德语,波兰语丹麦语)例如:radisson-blu.es,你不能看到,但是ss之间有额外的字符。 (尝试复制到记事本,看看它)。
我见过很多关于类似问题的帖子,但是每个解决方案都不会删除该特殊字符,或者将其删除,但也需要保留其他特殊字符。
用空字符串替换正则表达式[^ws.,!@#$%^&*()=+~`-]
你(不)看到的角色是U + 00AD Soft Hyphen。 您可以使用u00ad
在正则表达式中引用它,例如:
Regex.Replace(str, @"u00ad", "");
但是对于单字符替换,你也可以使用string.Replace
。
'xAD'
是一个软连字符(代码点的名称是"SOFT HYPHEN"
)。
根据Unicode码点数据库,它的类别是"Cf"
(或"Format"
),所以它可以与正则表达式@"p{Cf}"
匹配。
奇怪的是,Microsoft Visual C#2010 Express表示它不匹配@"p{Cf}"
,而是匹配@"p{Pd}"
( "Dash Punctuation"
),与普通连字符相同。