在Python中识别字符集

2024-09-29 01:28:40 发布

您现在位置:Python中文网/ 问答频道 /正文

我在解析大约20亿行字符串时遇到了一个难题,我想识别和分类使用的最大字符范围

输入:

示例1:“456624”

例2:“一般性遗传病”

例3:“海军上将!2”

输出

例1:10个字符 (0123456789)

例2:26字符 (AABBCCDDEEFFGGHHIIJKKLMNNOOPQQRRSSTTUUVVWXXYYZZ)

例3:96个字符 (0123456789AABBCCDDEEFFGGHHIIJJKKLMNNOOPQQRRSSTTUUVWWXXYYZZ!”#$%&;(*+,-./:;<;=>;?@[]^{124;})

有什么简单的方法可以做到这一点,直到现在我已经尝试了不同版本的if和isdigit()islower()isupper()string.punctuation


Tags: 方法字符串ltgt版本示例if分类
1条回答
网友
1楼 · 发布于 2024-09-29 01:28:40

将字符分组到“集合”中有许多不同的、任意的方法,但一种常见的方法是将它们的基本数字编码分为不同的范围。例如ASCII(方便地说,UTF-8 inherits these mappings and more)将可打印的字母、数字和标点符号设置为32到127之间的数字

32 - 47  Space and Punctuation
48 - 57  Numbers 0 - 9
58 - 64 Some more punctuation
65 - 90 Uppercase Alphabetic Characters
95 - 96 Some more punctuation
97 - 122 Lower case Alphabetic Characters
123 - 127 More punctuation. 

这个基本集合的扩展也被连续编号,并覆盖其他languages、整个new alphabets和某些情况下long-lost{a7}中的附加变音字符。只需熟悉UTF-8(以及更高版本的UTF-16)规范,以及您想要对哪些数字块进行切片,然后查看用于对您正在查看的字符串进行编码的原始字节

不过,首先,32到127之间的ASCII字符集应该为您提供一个使用的起点

您可以将数据作为原始字节加载,并读取每个字节的数值以获得这些数值范围,或者加载到字符串中并使用your_string.encode("utf-8")获得数值字节值的等效列表。这些应倾向于落在此处描述的范围内

您可以整理一组字节范围以满足您的需求,包括或排除特定字符,具体取决于您自己的需求

或者,如果您愿意留在字符串范围内,只需将您的字符集设置为有效字符的集合,并与使用函数的字符集进行匹配

比如:

char_d = { "upper_case_alpha" : "ABCDEFGHIJKLMNOPQRSTUVWXYZ", 
           "lower_case_alpha" : "abcdefghijklmnopqrstuvwxyz",
           "full_alphabet"    : "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",
           "digits"           : "0123456789" }

def tag_charsets(some_string, char_set_map):
    matching_tags = []
    for n,s in char_set_map.items():
        if all([c in s for c in some_string if c != " "]): # Explicitly excluding a space character from the match
            matching_tags.append(n)
    return matching_tags

tag_charsets("Mary had a little lamb", char_d)

它将返回一个包含以下内容的列表:

["full_alphabet"]

tag_charsets("mary had a little lamb", char_d)

将返回:

['lower_case_alpha', 'full_alphabet']

因为这两个集合都在经过修改的小写字符串中

这里,我只在整个字符串符合的情况下标记给定的字符集。对于您的用例,可能有更方便的方法,但是您可以轻松地编辑逻辑以执行您想要的任何操作。例如,您可能希望选择对给定字符串有效的最具体的单个“集合”

相关问题 更多 >