繁体   English   中英

正则表达式捕获超出 az 的字母

[英]Regular expression to catch letters beyond a-z

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

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

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

我的建议是将正则表达式(或至少“字母”部分)放入本地化资源中,然后您可以根据当前语言环境将其拉出并形成更大的模式。

\p{name} 呢?

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

我对 unicode 不太了解,但也许你的角色适合 unicode class?

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

此正则表达式仅通过以下方式允许有效符号:

[a-zA-ZÀ-ÿ ]

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

Unicode 规范有一些指导方针,但通常答案是“否”,您需要列出您认为是“字母”的字符。

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

一般来说,这是不可能的。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM