C#中正则表达式中的外语字符

时间:2015-01-26 18:54:12

标签: c# regex non-english

在C#代码中,我试图传递中文字符:" 中文ABC123"

我一般使用"^[a-zA-Z0-9\s]+$"时使用字母数字,

它没有通过"中文ABC123"并且正则表达式验证失败。

我需要为C#添加哪些其他表达式?

2 个答案:

答案 0 :(得分:19)

要匹配任何语言的任何字母,请使用:

\p{L}

如果您还想匹配数字:

[\p{L}\p{Nd}]+

\p{L} ...匹配unicode类别字母的字符 它是[\ p {Ll} \ p {Lu} \ p {Lt} \ p {Lm} \ p {Lo}]的缩写形式 \p{Ll} ...匹配小写字母。 (ABC)
\p{Lu} ...匹配大写字母。 (ABC)
\p{Lt} ...匹配标题字母。
\p{Lm} ...匹配修饰符 \p{Lo} ...匹配没有案例的字母。 (中文)

\p{Nd} ...匹配unicode类别十进制数字的字符。

只需将^[a-zA-Z0-9\s]+$替换为^[\p{L}0-9\s]+$

答案 1 :(得分:0)

感谢@ Andie2302指出正确的操作方法。

此外,对于世界上许多语言,它仍然具有需要主字符才能生成它的“添加字符”(例如泰语单词“เก็บ”,如果仅使用\ p {L},则仅显示“เก” บ',您会看到单词中缺少一些符号)。

这就是为什么只有\p{L}不能适用于所有外语的原因。

因此,您需要使用以下代码来支持几乎所有的外语

\p{L}\p{M}

注意:

L代表“字母”(所有语言的所有字母,但不包括“标记”)

M代表“标记”(“标记”不能单独显示,需要“字母”显示)

除了您需要数字外,请使用下面的代码

\p{N}

注意:

N代表“数字”


感谢本网站提供非常有用的信息

https://www.regular-expressions.info/unicode.html