如何将每次正则匹配结果存入同一列表实现所有匹配字符串访问
问题原因
你当前的代码在每次匹配成功后,都会在循环内部执行m_1 = []重新创建空列表,导致每轮匹配到的结果都被存入独立的新列表,无法统一汇总所有结果。
修复方法
将存储结果的列表初始化操作移到循环开始之前(仅创建一次列表),匹配到结果时直接往这个列表追加元素即可,修改后的可运行代码如下:
import re result = [] # 直接遍历列表元素比按索引遍历写法更简洁,可读性更好 for line in new: match_res = re.search(r"core-\b(\d+)", line) if match_res: result.append(match_res.group(1)) # 所有循环执行完成后,result里就存了全部匹配到的字符串 print(result)
如果需要保留你原来的索引遍历写法,只需要把m_1 = []挪到for循环外面即可,逻辑完全一致。
精简写法参考
如果循环内不需要处理其他额外逻辑,也可以用列表推导式快速实现:
import re result = [m.group(1) for line in new if (m := re.search(r"core-\b(\d+)", line))]
上面的写法用到了海象运算符
:=(Python 3.8及以上版本支持),只会对每个元素执行一次正则匹配,效率比重复调用两次search的写法更高。
内容的提问来源于stack exchange,提问作者Kierra Howard
相关产品推荐
相关产品推荐

