我想匹配拉丁区块中的所有小写字母形式。简单的'a-z‘只匹配U+0061和U+007A之间的字符,而不是所有其他小写形式。
我想要匹配所有的小写字母,最重要的是,所有在EFIGS语言中使用的拉丁语块中的重音小写字母。
A-zà-a是一个开始,但仍然有许多其他的小写字符(参见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
发布于 2011-03-08 05:21:44
Python目前不支持正则表达式中的Unicode属性。有关支持它们的Ponyguruma library的链接,请参阅this answer。
使用这样的库,您可以使用\p{Ll}
来匹配Unicode字符串中的任何小写字母。
Unicode标准中的每个字符都只属于一个类别。\p{Ll}
是小写字母的类别,而\p{L}
包含“字母”类别中的所有字符(字母,大写;字母,小写;字母,标题大小写;字母,修饰符;和字母,其他)。有关详细信息,请参见Unicode Standard的角色特性一章。或者参阅this page,了解有关在正则表达式中使用Unicode的详细说明。
发布于 2013-06-12 20:04:17
看起来像是this recipe在旧的2005年发布的
import sys, re
uppers = [u'[']
for i in xrange(sys.maxunicode):
c = unichr(i)
if c.isupper(): uppers.append(c)
uppers.append(u']')
uppers = u"".join(uppers)
uppers_re = re.compile(uppers)
print uppers_re.match('A')
仍然是相关的。
发布于 2011-03-08 04:38:52
如果您使用\p{L}
,它将匹配任何unicode字母。查看示例here。您还可以将其与\p{M}
结合使用,以匹配包含变音符号的希伯来语-esqe语言。(\p{L}|\p{M})+
编辑:
第一次我只漏掉了关于小写字母的部分。\p{L}
将匹配所有字母,\p{Ll}
将仅匹配小写。
https://stackoverflow.com/questions/5224835
复制相似问题