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

sla*_*acy 20 python regex unicode utf-8

我想匹配拉丁语块中的所有小写字母形式.平凡的'[az]'只匹配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 
Run Code Online (Sandbox Code Playgroud)

Avi*_*Avi 12

Python目前不支持正则表达式中的Unicode属性.请参阅此答案,获取支持它们的Ponyguruma库的链接.

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

Unicode标准中的每个字符都只属于一个类别.\p{Ll}是小写字母的类别,同时\p{L}包括"Letter"类别之一中的所有字符(Letter,大写; Letter,小写; Letter,titlecase; Letter,modifier;以及Letter,other).有关更多信息,请参阅Unicode标准的"字符属性"一章.或者,请参阅此页面以获得有关在正则表达式中使用Unicode的详细说明.

  • 仅供参考."正则表达式"模块(http://pypi.python.org/pypi/regex)表示它支持Unicode字符属性,但它似乎不适用于'\ p {Ll}',但对某些人有效其他财产.因人而异. (7认同)

Ant*_*ins 8

看起来好像这个食谱贴在旧的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')
Run Code Online (Sandbox Code Playgroud)

仍然相关.


Tho*_*mas 5

您可能想查看regular-expressions.info

\n\n

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

\n\n

编辑:\n对此进行更多阅读,可能有一种方法:[\\p{Ll}\\p{Lo}]这意味着带有大写变体的小写字符或没有小写和大写的字符(例如中文字符)。

\n\n

正则表达式[\\p{Ll}\\p{Lo}]+匹配测试字符串\xc3\xa0\xc3\x80helloHello\xe4\xbd\xa0\xe5\xa5\xbd\xd0\x9f\xd1\x80\xd1\x8b\xd0\xb2\xd1\x96\xd1\x82\xd0\xb0\xd0\xbd\xd0\xbd\xd0\xb5并将匹配x结果替换为结果,而替换结果x\xc3\x80xHx\xd0\x9fx匹配(注意不匹配的汉字)。[\\p{Ll}]+x\xc3\x80xHx\xe4\xbd\xa0\xe5\xa5\xbd\xd0\x9fx

\n

  • 这很有趣,但是 Python 正则表达式不包括 \p :( (4认同)