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的详细说明.
看起来好像这个食谱贴在旧的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)
仍然相关.
您可能想查看regular-expressions.info。
\n\n但是,据我所知,没有字符类或修饰符可以表示“仅小写字符”(并且并非每种语言都有小写字符),所以我想说您可能必须使用多个范围(可能几乎与 unicode 块一样多。
编辑:\n对此进行更多阅读,可能有一种方法:[\\p{Ll}\\p{Lo}]这意味着带有大写变体的小写字符或没有小写和大写的字符(例如中文字符)。
正则表达式[\\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
| 归档时间: |
|
| 查看次数: |
7017 次 |
| 最近记录: |