人们通常希望列出给定 Unicode 类别中的所有字符。例如:
- List all Unicode whitespace , How can I get all whitespaces in UTF-8 in Python?
- Characters with the property
Alphabetic
可以通过遍历所有 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?
最佳答案
如果您需要经常这样做,为自己构建一个可重复使用的 map 就足够容易了:
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 文件或其他快速解析到字典的格式加载此映射应该不会太痛苦。
一旦有了映射,查找类别当然是在常数时间内完成的。
关于python - 有效地列出给定 Unicode 类别中的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14245893/