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

标签 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?

最佳答案

如果您需要经常这样做,为自己构建一个可重复使用的 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/

相关文章:

php - 我怎样才能知道标点字符在 UTF 8 中的形式?

python unicode 正则表达式

python - Groupby 和 sum 行以聚合 PRODUCT 列的多个值

python - 如何找到给定斐波那契数的索引

python - 在python编译中EOFError SyntaxError : multiple statements found while compiling a single statement

c# - TextWriter.ReadToEnd 与 Unix wc 命令

html - 对于包含大部分阿拉伯语文本的网页,我应该使用什么字符编码? utf-8可以吗?

python - Unicode (UTF-8) 在 Python 中读取和写入文件

python - 磁盘空间效率最高的内存映射字典,用于 2000 万个键值对,速度不是太关心的问题

regex - Perl:如何匹配 FULLWIDTH LATIN SMALL