什么是匹配所有utf-8 / unicode小写字母形式的正确正则表达式

时间:2011-03-07 20:25:23

标签: python regex unicode utf-8

我想在Latin块中匹配所有小写字母形式。平凡的'[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 

4 个答案:

答案 0 :(得分:11)

Python目前不支持正则表达式中的Unicode属性。请参阅this answer以获取支持它们的Ponyguruma library的链接。

使用这样的库,您可以使用\p{Ll}来匹配Unicode字符串中的任何小写字母。

Unicode标准中的每个字符都只属于一个类别。 \p{Ll}是小写字母的类别,而\p{L}包含“Letter”类别之一中的所有字符(Letter,大写; Letter,小写; Letter,titlecase; Letter,modifier;和Letter,其他)。有关更多信息,请参阅Unicode Standard的“字符属性”一章。或者请参阅this page以获得有关在正则表达式中使用Unicode的详细说明。

答案 1 :(得分:8)

看起来好像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')

仍然相关。

答案 2 :(得分:3)

您可能需要查看regular-expressions.info

但是,据我所知,没有字符类或修饰符表示“仅小写字符”(并不是每种语言都有小写字符),所以我要说你可能要使用多个范围(可能几乎与unicode块一样多。

编辑: 阅读更多内容,可能有一种方法:[\p{Ll}\p{Lo}]表示带有大写变体的小写字符或没有小写和大写字母的字符(例如,如果是中文字符)。< / p>

正则表达式[\p{Ll}\p{Lo}]+匹配测试字符串àÀhelloHello你好Прывітанне并将匹配项替换为x会产生xÀxHxПx,而替换[\p{Ll}]+的匹配项会导致xÀxHx你好Пx (注意未匹配的中文字符。)

答案 3 :(得分:0)

如果您使用\p{L},它将匹配任何unicode字母。查看示例here。您还可以将其与\p{M}结合使用,以匹配包含变音符号的希伯来语esqe语言。 (\p{L}|\p{M})+

编辑:

我第一次错过了关于只有小写字母的部分。 \p{L}将匹配所有字母,\p{Ll}将仅匹配小写字母。