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

4
问题在于如何移除域名中的一些奇怪字符,但要保留特殊的Unicode字符,例如有重音符号的字母(德语、丹麦语或波兰语)。
例如:radis­son-blu.es,你看不见,但是在ss之间有额外的字符。(试着复制到记事本中查看)
我看到过许多关于类似问题的帖子,但每个解决方案都没有移除那个特殊字符,或者它正在移除它,但也要把其他我需要保留的特殊字符一并移除。
4个回答

2
你看到的(不是)那个字符是U+00AD软连字号。你可以在正则表达式中使用\u00ad进行引用,例如:

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

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


我知道,但重点不仅仅是处理这一个字符,而是整个种类。 - olq

2

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


你在我的评论之后编辑了它;我一开始并没有错。 - Joey
我检查了修改后的版本,看起来它按照我的要求工作。非常感谢。 - olq

0

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

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

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


-2
这对我很有效:
[\x00-\x1f]|[\x81\x8d\x8d\x8f\x90\x9d\xa0\u2060\uFEFF]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接