Python按每第5个逗号分割字符串时如何获取末尾剩余内容
问题原因
你写的正则只会匹配恰好包含5个逗号分隔值的片段,末尾不足5个值的剩余内容因为不满足匹配规则,直接被丢弃了,所以拿不到最后的da。
实现方案
正则修正版
调整正则匹配逻辑,除了匹配满5个值的完整分组,额外匹配字符串末尾剩余的不足5个值的片段即可:
import re my_string = 'abc,kjj,hg,kj,ls,jsh,ku,lo,sasad,hh,da' a = re.findall(r'(?:[^,]+,){4}[^,]+|[^,]+$', my_string)
运行后输出和预期完全一致:
['abc,kjj,hg,kj,ls', 'jsh,ku,lo,sasad,hh', 'da']
正则逻辑说明:
(?:[^,]+,){4}[^,]+:匹配4个「值+逗号」的组合,再接1个值,刚好对应5个值的完整分组|[^,]+$:匹配到字符串末尾的所有剩余值,不管剩几个都能捕获,不会漏掉尾部内容
非正则实现(更推荐)
正则写法可读性一般,后续如果要调整分组大小还要改正则规则,更简单的方式是先全部分割再按组切片拼接,逻辑直白不容易出错:
my_string = 'abc,kjj,hg,kj,ls,jsh,ku,lo,sasad,hh,da' items = my_string.split(',') a = [','.join(items[i:i+5]) for i in range(0, len(items), 5)]
这个写法不管总长度是多少,最后剩余不足5个值的部分都会自动作为最后一个元素返回,后续要改成每3个、每10个值分割,只需要把代码里的数字5改成对应值就行,维护成本低很多。
内容的提问来源于stack exchange,提问作者vai_007
相关产品推荐
相关产品推荐

