Python如何按相同类型字符的连续分组拆分字符串
Python将字符串拆分为连续同类型字符组的简便方法
最简便的实现可以用标准库itertools的groupby方法,只需要给每个字符定义分类规则即可,完整实现代码如下:
from itertools import groupby s = "https:var///rer/tr.ewr,uuu234 34,5\n" def get_char_type(c): # 自定义字符分类规则,可根据需求调整 if c.isalpha(): return "alpha" # 字母类 elif c.isdigit(): return "digit" # 数字类 else: return "other" # 其他字符(标点、符号、空格、换行等) result = [''.join(group) for _, group in groupby(s, key=get_char_type)]
默认输出会保留空格分组:
['https', ':', 'var', '///', 'rer', '/', 'tr', '.', 'ewr', ',', 'uuu', '234', ' ', '34', ',', '5\n']
如果不需要保留纯空格分组,加过滤条件即可:
result = [''.join(group) for _, group in groupby(s, key=get_char_type) if not (group and ''.join(group).isspace())]
过滤后结果和预期输出完全一致:
['https', ':', 'var', '///', 'rer', '/', 'tr', '.', 'ewr', ',', 'uuu', '234', '34', ',', '5\n']
原理解释
groupby会遍历字符串,把连续的、key函数返回值相同的字符分为一组,我们通过get_char_type给不同类型的字符打标签,就能实现按字符类型连续分组的需求。如果需要调整分类规则(比如把标点和空格分开、区分大小写字母等),只需要修改get_char_type的判断逻辑即可。
内容的提问来源于stack exchange,提问作者Demetry Pascal
相关产品推荐
相关产品推荐

