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

解决re.sub类型报错:让REReplacer支持列表/嵌套列表输入

解决方案

要让这个类支持列表(包括嵌套列表)输入,核心思路就是递归遍历处理每个元素——遇到列表就拆开来逐个处理,遇到字符串就执行原有的替换逻辑。

直接修改replace方法即可,无需额外将列表转为字符串,修改后的完整代码如下:

import re

# 示例替换规则(请替换为你实际的R_patterns定义)
R_patterns = [
    (r'oranges', 'apples'),
    (r'like', 'love')
]

class REReplacer(object):
    def __init__(self, pattern = R_patterns):
        self.pattern = [(re.compile(regex), repl) for (regex, repl) in pattern]

    def replace(self, text):
        # 递归处理列表/嵌套列表
        if isinstance(text, list):
            return [self.replace(item) for item in text]
        # 处理字符串类型的核心替换逻辑
        s = text
        for (pattern, repl) in self.pattern:
            s = re.sub(pattern, repl, s)
        return s

测试示例

调用时无论传入字符串、普通列表还是嵌套列表都能正常工作:

rep = REReplacer()
# 字符串输入
print(rep.replace("I like oranges"))  # 输出: I love apples
# 普通列表输入
print(rep.replace(["I like oranges", "She hates bananas"]))  # 输出: ["I love apples", "She hates bananas"]
# 嵌套列表输入
print(rep.replace([["I like oranges"], ["He eats oranges", "We buy oranges"]]))
# 输出: [["I love apples"], ["He eats apples", "We buy apples"]]

补充说明

  • 递归逻辑会自动逐层拆解嵌套列表,直到处理到最底层的字符串元素,完美适配嵌套结构;
  • 如果需要支持元组这类可迭代序列,可将判断条件改为if isinstance(text, (list, tuple)),并返回对应类型(比如元组用tuple(self.replace(item) for item in text))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:39:22