我想匹配拉丁块中的所有小写字母形式。普通的'[a-z]'只匹配U+0061和U+007A之间的字符,而不是所有其他小写形式。
我想匹配所有的小写字母,最重要的是,所有的重音小写字母在拉丁块使用的EFIGS语言。
[a-z&-ý]是一个开始,但仍然有大量其他小写字符(参见http://www.unicode.org/charts/PDF/U0000.pdf)。有推荐的方法吗?
仅供参考,我使用的是Python,但我怀疑这个问题是跨语言的。
Python内置的“islower()”方法似乎做了正确的检查:
lower = ''
for c in xrange(0,2**16):
if unichr(c).islower():
lower += unichr(c)
print lower
看起来像是this recipe在旧的2005年发布的
仍然相关。
Python当前不支持正则表达式中的Unicode属性。请参阅this answer以获取指向支持它们的Ponyguruma library的链接。
使用这样的库,您可以使用
\p{Ll}
来匹配Unicode字符串中的任何小写字母。Unicode标准中的每个字符都属于一个类别。
\p{Ll}
是小写字母的类别,而\p{L}
包含一个“字母”类别(字母,大写;字母,小写;字母,标题;字母,修饰语;字母,其他)中的所有字符。有关详细信息,请参阅Unicode Standard的字符属性一章。或者参见this page以获得有关在正则表达式中使用Unicode的良好解释。你可能想看看regular-expressions.info。
然而,据我所知,没有一个字符类或修饰符只表示“小写字符”(并非每种语言都有小写字符),所以我认为您可能需要使用多个范围(可能几乎与unicode块一样多)。编辑: 阅读更多关于这方面的内容,可能有一种方法:
[\p{Ll}\p{Lo}]
,这意味着小写字符带有大写变量,或者没有小写和大写的字符(例如,对于中文字符)。正则表达式
[\p{Ll}\p{Lo}]+
匹配测试字符串àÀhelloHello你好Прывітанне
,用x
替换匹配结果xÀxHxПx
,而用[\p{Ll}]+
替换匹配结果xÀxHx你好Пx
(注意未匹配的中文字符)。相关问题 更多 >
编程相关推荐