我在解析大约20亿行字符串时遇到了一个难题,我想识别和分类使用的最大字符范围
输入:
示例1:“456624”
例2:“一般性遗传病”
例3:“海军上将!2”
输出
例1:10个字符 (0123456789)
例2:26字符 (AABBCCDDEEFFGGHHIIJKKLMNNOOPQQRRSSTTUUVVWXXYYZZ)
例3:96个字符 (0123456789AABBCCDDEEFFGGHHIIJJKKLMNNOOPQQRRSSTTUUVWWXXYYZZ!”#$%&;(*+,-./:;<;=>;?@[]^{124;})
有什么简单的方法可以做到这一点,直到现在我已经尝试了不同版本的if和isdigit()
、islower()
、isupper()
和string.punctuation
将字符分组到“集合”中有许多不同的、任意的方法,但一种常见的方法是将它们的基本数字编码分为不同的范围。例如ASCII(方便地说,UTF-8 inherits these mappings and more)将可打印的字母、数字和标点符号设置为32到127之间的数字
这个基本集合的扩展也被连续编号,并覆盖其他languages、整个new alphabets和某些情况下long-lost{a7}中的附加变音字符。只需熟悉UTF-8(以及更高版本的UTF-16)规范,以及您想要对哪些数字块进行切片,然后查看用于对您正在查看的字符串进行编码的原始字节
不过,首先,32到127之间的ASCII字符集应该为您提供一个使用的起点
您可以将数据作为原始字节加载,并读取每个字节的数值以获得这些数值范围,或者加载到字符串中并使用
your_string.encode("utf-8")
获得数值字节值的等效列表。这些应倾向于落在此处描述的范围内您可以整理一组字节范围以满足您的需求,包括或排除特定字符,具体取决于您自己的需求
或者,如果您愿意留在字符串范围内,只需将您的字符集设置为有效字符的集合,并与使用函数的字符集进行匹配
比如:
它将返回一个包含以下内容的列表:
而
将返回:
因为这两个集合都在经过修改的小写字符串中
这里,我只在整个字符串符合的情况下标记给定的字符集。对于您的用例,可能有更方便的方法,但是您可以轻松地编辑逻辑以执行您想要的任何操作。例如,您可能希望选择对给定字符串有效的最具体的单个“集合”
相关问题 更多 >
编程相关推荐