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

2024-05-15 02:43:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想匹配拉丁块中的所有小写字母形式。普通的'[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 

Tags: 方法org语言httpwwwunicode字符lower
3条回答

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

仍然相关。

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(注意未匹配的中文字符)。

相关问题 更多 >

    热门问题