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

问题描述 投票:0回答:5

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

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

c# regex character-encoding special-characters
5个回答
3
投票

用空字符串替换正则表达式

[^\w\s.,!@#$%^&*()=+~`-]


2
投票

您在那里(没有)看到的字符是 U+00AD 软连字符。您可以使用

\u00ad
在正则表达式中引用它,例如:

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

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

string.Replace


0
投票

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

根据Unicode代码点数据库,其类别为

"Cf"
(或
"Format"
),因此可以与正则表达式
@"\p{Cf}"
匹配。

奇怪的是,Microsoft Visual C# 2010 Express 表示它不匹配

@"\p{Cf}"
,而是匹配
@"\p{Pd}"
(
"Dash Punctuation"
),与普通连字符属于同一类别。


0
投票

这是一个更简单的版本:

[^\x00-\x7F]

在 Regex101 上测试: https://regex101.com/r/jHVEb5/1


-2
投票

这对我有用:

[\x00-\x1f]|[\x81\x8d\x8d\x8f\x90\x9d\xa0\u2060\uFEFF]
© www.soinside.com 2019 - 2024. All rights reserved.