有效地列出给定Unicode类别中的所有字符

时间:2013-01-09 20:30:16

标签: python unicode character-properties

通常,人们希望列出给定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?

1 个答案:

答案 0 :(得分: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']

如果这对于启动时来说太昂贵,请考虑将该结构转储到文件中;从JSON文件或其他快速解析到dict格式加载此映射不应该太痛苦。

完成映射后,查找类别当然是在恒定的时间内完成的。