2013-01-09 54 views
6

通常希望列出给定Unicode类别中的所有字符。例如:高效地列出给定Unicode类别中的所有字符

,能够产生该列表通过遍历所有Unicode码点和测试所需的类别(Python 3中):

[c for c in map(chr, range(0x110000)) if unicodedata.category(c) in ('Ll',)] 

或使用正则表达式,

re.findall(r'\s', ''.join(map(chr, range(0x110000)))) 

但是这些方法很慢。有没有办法查找类别中的字符列表,而无需遍历所有的字符?

Perl的相关问题:How do I get a list of all Unicode characters that have a given property?

回答

9

如果你需要经常这样做,它很容易建立自己的可重复使用的地图:

import sys 
import unicodedata 
from collections import defaultdict 

unicode_category = defaultdict(list) 
for c in map(chr, range(sys.maxunicode + 1)): 
    unicode_category[unicodedata.category(c)].append(c) 

并从那里出来使用该地图转换回一系列字符给定类别:

alphabetic = unicode_category['Ll'] 

如果这是成本过于昂贵的启动-U p时间,考虑将该结构倾倒到文件中;从JSON文件或其他快速解析到字典格式加载此映射应该不会太痛苦。

一旦你有了映射,当然在恒定时间内查找一个类别。

+4

应该用map() –

+2

@ m.kocikowski中的unichr()替换chr():除非您使用的是Python 3,问题的OP明确表示(否则在Python 2中会失败)。 –

相关问题