C#正则表达式删除特殊字符但保留字母数字

时间:2014-12-31 12:34:21

标签: c#

return Regex.Replace(source, "[^a-zA-Z0-9% @$\"!#%&'()*+,./:;<>=?-]", string.Empty);

如何允许ČĆŽPŠĐ等字符或带变音符号的德语字符......

3 个答案:

答案 0 :(得分:2)

您可以使用显示的here字符类。

代码的简化版:new Regex("[^\\p{L}0-9 ]").Replace("this is a test ČĆŽPŠĐ ä 244 $%^&*", String.Empty);

此收益率:this is a test ČĆŽPŠĐ ä 244

在这种情况下,

\\p{L}表示用不同语言标记字母的字符集。

答案 1 :(得分:2)

试试这个:

Regex.Replace(source, "[^a-zA-Z0-9% @$\"!#%&'()*+,./:;<>=?\u0100-\u01FF-]", string.Empty);

德语是:U+0100 - &gt; U+01FF

答案 2 :(得分:1)

'Č','Ć','Ž','Š'和'Đ'都是Unicode类别'Letter,Uppercase'的一部分。您可以使用\p{..}来匹配特定Unicode类别中的字符,其中..是(短)类别名称。

例如,\p{Lu}匹配“Letter,Uppercase”类别中的所有字符,\p{Ll}匹配“Letter,Lowercase”类别中的所有字符。

所以只需将a-z替换为\p{Ll},将A-Z替换为\p{Lu}(只需确保转义\,或使用逐字字符串文字表达)。

有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/20bw873z%28v=vs.110%29.aspx#CategoryOrBlock;有关所有受支持的类别,请参阅http://msdn.microsoft.com/en-us/library/20bw873z%28v=vs.110%29.aspx#SupportedUnicodeGeneralCategories