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

Python函数内正则搜索结果无法替换列表元素问题求解

问题根因

代码无法修改lst_a的核心原因有3个:

  • 遍历逻辑没有对齐索引:仅遍历了lst_b里的正则规则,没有跟踪每个规则对应的lst_a替换位置、匹配分组号,匹配出结果后没有对应位置可写入。
  • 赋值逻辑完全错误:函数内的variables是局部变量,给它重新赋值只会改变这个局部变量的指向,根本不会修改lst_a列表内部的元素。Python中列表是可变对象,必须通过lst_a[索引] = 新值的方式才能修改原列表内容,你注释掉的海象运算符写法本质和直接给局部变量赋值没有区别,同样无法修改原列表。
  • 匹配逻辑错位:仅传入了单个分组位置值lst_c[2],但循环没有把分组位置和每个正则的匹配流程一一绑定,出现了前一个正则无对应分组直接报错、后一个匹配结果被覆盖为None的问题。
修正代码

以下代码可以直接跑出你期望的结果:

import re

var_1 = var_2 = var_3 = "replace_me"

lst_a = [
    var_1,
    var_2,
    var_3,
]

lst_b = [
    '(foo)(bar)',
    '(foo)(bar)(baz)',
    '(foo)(baz)(bar)',
]

lst_c = [1, 2, 3]

def lst_search_n_save(assign_group_pos=None, target_str="foobarbaz"):
    # 按索引同步遍历,保证正则、分组、待替换位置一一对应
    for idx in range(len(lst_b)):
        current_regex = lst_b[idx]
        # 传入统一分组位置则用传入值,否则默认取lst_c对应位置的分组号
        group_pos = assign_group_pos if assign_group_pos is not None else lst_c[idx]
        try:
            match_res = re.search(current_regex, target_str)
            print(match_res)
            group_val = match_res.group(group_pos)
            print(group_val)
            # 直接通过索引修改原列表对应位置的值
            lst_a[idx] = group_val
        except (AttributeError, TypeError, IndexError):
            print("error\n")
            lst_a[idx] = "not found"

# 本次测试传入分组位置3,即lst_c[2]
lst_search_n_save(assign_group_pos=lst_c[2])

print(lst_a)
print(lst_a[1])
运行结果验证

执行代码后输出完全符合预期:

<re.Match object; span=(0, 6), match='foobar'>
error

<re.Match object; span=(0, 9), match='foobarbaz'>
baz
<re.Match object; span=(0, 9), match='foobarbaz'>
bar
['not found', 'baz', 'bar']
baz

内容的提问来源于stack exchange,提问作者weissewolke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 00:04:09