Python正则循环中字典仅输出最后值,如何输出所有匹配结果?
解决Python正则匹配结果仅显示最后一项的问题
你遇到的核心问题是循环中反复覆盖了同一个变量/字典,没有保存所有匹配结果。比如每次匹配到内容时,你可能直接把值赋给了同一个字典,导致之前的匹配结果被覆盖,最后只留下最后一次的内容。
错误代码示例(大概率是这种情况)
import re # 假设你的正则表达式 pattern = r'\bW[A-Z]{4}S\b' target_text = "WARPS test WHIRS demo WEEPS example" # 错误:只用一个字典存结果,每次循环覆盖 match_result = {} for match in re.finditer(pattern, target_text): match_result["word"] = match.group() match_result["start"] = match.start() # 写入文件时只输出最后一次覆盖的字典 with open('output.txt', 'w', encoding='utf-8') as f: f.write(str(match_result))
修改后的正确代码
import re pattern = r'\bW[A-Z]{4}S\b' target_text = "WARPS test WHIRS demo WEEPS example" # 用列表存储所有匹配结果,每个匹配项是一个独立字典 all_results = [] for match in re.finditer(pattern, target_text): # 每次循环创建新的字典,存储当前匹配的信息 current_match = { "matched_word": match.group(), "start_index": match.start(), "end_index": match.end() } # 将当前匹配字典添加到列表中 all_results.append(current_match) # 写入文件时遍历所有结果,逐个写入 with open('output.txt', 'w', encoding='utf-8') as f: for idx, result in enumerate(all_results, 1): f.write(f"第{idx}个匹配项:\n") f.write(f"单词:{result['matched_word']}\n") f.write(f"位置:{result['start_index']}-{result['end_index']}\n\n")
关键修改点
- 用列表替代单个字典来存储所有匹配结果,确保每个匹配项都被保留
- 循环内每次创建新的字典(或直接把匹配字符串添加到列表),避免覆盖之前的内容
- 写入文件时遍历整个结果列表,把每个匹配项的内容都写入,而不是只输出最后一个变量
这样修改后,所有匹配到的内容(WARPS、WHIRS、WEEPS等)都会被依次写入到txt文件中。
内容的提问来源于stack exchange,提问作者Doe
相关产品推荐
相关产品推荐

