我正在使用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'未定义'。
(我了解未定义“匹配”。我不确定如何定义“匹配”。)
如何将“匹配”作为参数传递?谢谢!
答案 0 :(得分:1)
您必须使用lambda并通过比赛
string = re.sub(r"{(.*?)}", lambda match :matchVar(match, another_argument), string)
或将matchVar更改为def matchVar(match):
并传递类似re.sub(r"{(.*?)}", matchVar, string)