【问题标题】:Function to dictate the replacements in re.sub method (Python)在 re.sub 方法(Python)中指示替换的函数
【发布时间】:2020-03-24 23:00:15
【问题描述】:

尝试使用正则表达式对字符串执行替换。

re.sub(regex, repl_func, content)

问题是当我需要替换依赖于来自regex 的匹配对象时,我不明白替换将如何通过repl_func 发生;即,我将使用该匹配对象作为字典键来获取需要替换该特定对象的匹配值。

    for mobj in re.finditer(regex, content):
        t = mobj.lastgroup
        v = match_obj.group(t)

        if t == 'NAME':
            ...
        elif t == '\n':
            ...

如上所示,我已尝试迭代所有匹配的对象,但无法弄清楚如何应用 re.sub。如果我理解正确,我的第一个代码段中的repl_function 需要以某种方式知道这是该正则表达式中的匹配对象。

任何想法,尤其是使用代码,将不胜感激,因为我才刚刚开始使用 Python。

【问题讨论】:

    标签: python regex python-3.x


    【解决方案1】:

    re.sub() 函数将匹配的对象作为参数传递给repl_function,并用匹配的字符串替换该函数返回的结果。如果你想用字典中的特定字符串替换匹配的对象,你可以简单地使用一个函数来处理它:

    def repl_func(matched_obj):
        my_dict = {'NAME':'rep1', '\n':'rep2'}
        try:
            match = matched_obj.group(0)
        except AttributeError:
            matched = ''
            # Or raise an exception
        else:
            return my_dict.get(match, '')
    
    re.sub(regex, repl_func, content)
    

    【讨论】:

      【解决方案2】:

      re docs 对此非常清楚:

      re.sub(pattern, repl, string, count=0, flags=0)

      返回通过替换 repl 替换字符串中最左边不重叠的 pattern 获得的字符串。

      如果repl 是一个函数,它会在pattern 的每个非重叠出现时调用。该函数采用单个匹配对象参数,并返回替换字符串。

      【讨论】:

      • 愚蠢的我,没有很好地阅读文档的那部分。我希望他们有一个更好的例子。抱歉,只能接受一个答案并选择较旧的答案。
      猜你喜欢
      • 2016-10-13
      • 1970-01-01
      • 2017-08-07
      • 1970-01-01
      • 2015-11-17
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 2013-02-03
      相关资源
      最近更新 更多