如何修正Python嵌套列表按10位长度拆分字符时生成冗余嵌套的问题
解决方案
你原代码的问题在于使用re.split()会返回拆分后的列表结构,导致多了多余嵌套,且你不需要拆分得到的前后缀内容,仅需要提取匹配到的10位数字即可,调整后的代码如下:
import re list_val = [['01234567890000','123456789','xyz'],['123456789','1234567890111','abcdefghijkl']] new_list = [] for sub_list in list_val: temp_sub = [] for txt in sub_list: # 尝试匹配连续10位的数字 match_res = re.search(r'\d{10}', txt) if match_res: # 匹配到则取10位数字 temp_sub.append(match_res.group()) else: # 未匹配到则保留原内容 temp_sub.append(txt) new_list.append(temp_sub)
运行上述代码得到的输出和你预期完全一致:
[['0123456789', '123456789', 'xyz'], ['123456789', '1234567890', 'abcdefghijkl']]
逻辑说明
- 用
re.search()替代re.split(),直接查找字符串中第一个出现的连续10位数字,不需要处理多余的拆分结果 - 匹配成功就直接取匹配到的10位数字加入结果,匹配失败就保留原字符串,不会产生多余的嵌套列表
如果你的场景里需要处理单个字符串中存在多个10位数字的情况,可以调整为用re.findall()取对应的匹配值即可。
内容的提问来源于stack exchange,提问作者waji
相关产品推荐
相关产品推荐

