正则表达式以捕获超出a-z的字母

时间:2009-03-17 21:43:05

标签: c# regex

只允许字母的正常正则表达式将是“[a-zA-Z]”但是我来自瑞典所以我必须将其更改为“[a- zåäöA-ZÅÄÖ]“。但是假设我不知道字母表中使用了哪些字母。

有没有办法自动知道哪些字符在给定的语言环境/语言中有效,或者我应该制作一个我认为我不知道的字符黑名单?

6 个答案:

答案 0 :(得分:13)

您可以使用\ pL匹配任何“字母”,它将支持所有语言的所有字母。您可以使用“命名块”将其缩小到特定语言。有关详细信息,请参阅MSDN上的Character Classes文档。

我的建议是将正则表达式(或至少“字母”部分)放入本地化资源中,然后可以根据当前区域设置和形式将其拉出为更大的模式。

答案 1 :(得分:3)

\ p {name}怎么样?

  

匹配{name}指定的命名字符类中的任何字符。   支持的名称是Unicode组和块范围。例如,Ll,Nd,Z,   IsGreek,IsBoxDrawing。

我对unicode知之甚少,但也许你的角色适合unicode类?

答案 2 :(得分:2)

使用\p\w unicode语义查看character categories选项。

答案 3 :(得分:0)

所有字符都是“有效的”,所以我认为你真的要求在语言环境中“通常被认为是字母”的字符。

Unicode规范有一些指导原则,但一般来说答案是“不”,你需要列出你认为是“字母”的字符。

答案 4 :(得分:0)

  

有没有办法自动知道哪些字符在给定的语言环境/语言中有效,或者我应该制作一个我认为我不知道的字符黑名单?

这不是,一般,可能。

毕竟Engligh文本确实包含了一些重音字符(例如“fête”和“naïve” - 在英语 - 英语中严格正确仍然使用重音符号)。在某些语言中,很少使用某些标准字母(例如法语中的y-diaeresis)。

然后考虑包括外来词(这通常是使用技术术语的情况)。报价将是另一个来源。

如果您的要求定义得足够狭窄,您可以创建定义,但这需要使用该语言的语言经验。

答案 5 :(得分:0)

此正则表达式只允许有效符号通过:

[a-zA-ZÀ-ÿ ]