12

通常人们想要列出给定 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 的相关问题:如何获取具有给定属性的所有 Unicode 字符的列表?

4

1 回答 1

12

如果您需要经常这样做,可以很容易地为自己构建一个可重复使用的地图:

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 文件或其他快速解析到字典的格式加载此映射应该不会太痛苦。

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

于 2013-01-09T20:38:37.837 回答