You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:15:27