如何从re.sub作为参数传递匹配对象

时间:2019-05-31 10:27:40

标签: python regex

我正在使用re.sub查找模式并替换匹配项,替换是基于匹配条件的。如何将比赛作为参数传递? python-3.7

如果我使用以下命令,则我已成功通过“比赛”:

string = re.sub(r"{(.*?)}", replaceVar, string)

但是此方法不允许我传递其他参数,这是我需要做的。

import re

def matchVar(match, another_argument):
    if match.group(1) == another_argument:
        return f'{{{another_argument}}}'
    else:
        return f'{{{another_argument}[{match.group(1)}]}}'

def replaceVar(string, another_argument):
    string = re.sub(r"{(.*?)}", matchVar(match, another_argument), string)
    return string

string = 'This is a {x} sentence. This is another {y} sentence.'
another_argument = 'x'
string = replaceVar(string, another_argument)
print(string)

该字符串应导致

'This is a {x} sentence. This is another {x[y]} sentence.'

但是我收到的是错误消息'NameError:名称'match'未定义'。

(我了解未定义“匹配”。我不确定如何定义“匹配”。)

如何将“匹配”作为参数传递?谢谢!

1 个答案:

答案 0 :(得分:1)

您必须使用lambda并通过比赛

string = re.sub(r"{(.*?)}", lambda match :matchVar(match, another_argument), string)

或将matchVar更改为def matchVar(match): 并传递类似re.sub(r"{(.*?)}", matchVar, string)

的函数