Python 传递两个参数以替换Re.sub的函数

Python 传递两个参数以替换Re.sub的函数,python,regex,Python,Regex,如何将两个变量传递给replace函数 我把它定义为 def replace(line,suppress) 这样称呼: line = re.sub(r'''(?x) ([\\]*\$\*)| ([\\]*\$\{[0-9]+\})| ([\\]*\$[0-9]+)| ([\\]*\$\{[a-zA-Z0-9_]+\-.*\})|

如何将两个变量传递给replace函数

我把它定义为

def replace(line,suppress)
这样称呼:

line = re.sub(r'''(?x)
                    ([\\]*\$\*)|
                    ([\\]*\$\{[0-9]+\})|
                    ([\\]*\$[0-9]+)|
                    ([\\]*\$\{[a-zA-Z0-9_]+\-.*\})|
                    ([\\]*\$\{[a-zA-Z0-9_]+\=.*\})|
                    ([\\]*\$[a-zA-Z0-9_]+)|
                    ([\\]*\$\{[a-zA-Z0-9_]+\})|
                    ([\\]*\$[\{]+.*)
                    ''',replace,line,suppress)
接收错误:

return _compile(pattern, flags).sub(repl, string, count)
TypeError: replace() takes exactly 2 arguments (1 given)

Re.sub
只接受函数的
repl
参数,该参数取一个值。这是在
Re.sub
的实现中定义的。您没有访问它的权限。

如前所述,当
re.sub
调用您的函数时,它只向它传递一个参数。指示这是一个匹配对象(可能是
变量?)

如果希望传递其他参数,则应将函数包装在lambda表达式中

比如:

re.sub('...', lambda line: replace(line, suppress))


注意在第二个
lambda
的签名中使用了
suppress=suppress
。这是为了确保当定义了
lambda
时使用的
suppress
的值是
suppress
的值。如果没有该选项,则执行函数时使用的
suppress
的值就是
suppress
的值。在这种情况下,它实际上并不重要(因为lambda是在定义之后立即使用的,所以
suppress
将永远不会在定义和执行之间更改),但我认为,你必须了解
lambda
如何在将来使用它。

你能更具体地说明你在尝试什么吗?我不明白。。。您想传递
re.sub
方法吗?它需要一个模式、匹配的替换字符串和一个运行模式的字符串。以下是文档:如果Apollo想要帮助诊断他的问题,他需要显示更多的代码,但是正如文档所说,re.sub可以将函数作为参数。我发现“抑制”相当令人困惑。
re.sub('...', lambda line, suppress=suppress: replace(line, suppress))