Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 要删除特殊/不可见字符的正则表达式_C#_Regex_Character Encoding_Special Characters - Fatal编程技术网

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

C# 要删除特殊/不可见字符的正则表达式,c#,regex,character-encoding,special-characters,C#,Regex,Character Encoding,Special Characters,问题是从域名中删除一些奇怪的字符,但保留特殊的unicode字符,如重音字母(德语、丹麦语或波兰语) 例如:radis-son-blu.es,你看不见,但是ss之间有额外的字符。(尝试复制到记事本以查看它) 我看到过很多关于类似问题的帖子,但是每个解决方案都没有删除那个特殊字符,或者正在删除它,还有其他我需要保留的特殊字符。你(没有)看到的字符是U+00AD软连字符。您可以使用\u00ad在正则表达式中引用它,例如: Regex.Replace(str, @"\u00ad", ""); 但是对

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

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

你(没有)看到的字符是U+00AD软连字符。您可以使用
\u00ad
在正则表达式中引用它,例如:

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

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

替换regex
[^\w\s,!@$%^&*()=+~`-]
和空字符串
'\xAD'
是一个软连字符(代码点的名称是
“软连字符”

根据Unicode代码点数据库,其类别是
“Cf”
(或
“Format”
),因此可以与regex
@“\p{Cf}”
匹配

奇怪的是,Microsoft Visual C#2010 Express说它不匹配
@“\p{Cf}”
,而是匹配
@“\p{Pd}”
“破折号标点符号”
),与普通连字符的类别相同。

这对我来说很有用:

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

你在我的评论之后编辑了它;我一开始并没有错。我检查了修改后的版本,它似乎按照我想要的方式工作。非常感谢。我知道,但重点不是只处理这一个角色,而是处理整个角色。