我想在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
答案 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}
将仅匹配小写字母。