正则表达式以捕获az之外的字母

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

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

您可以使用\ pL匹配任何“字母”,它将支持所有语言的所有字母。 您可以使用“命名块”将其缩小到特定语言。 可以在MSDN上的字符类文档中找到更多信息。

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

那么\ p {name}呢?

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

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

请参阅使用\p\w unicode语义的字符类别选择。

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

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

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

通常 ,这不是可能的。

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

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

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

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

 [a-zA-ZÀ-ÿ ]