Python 传递两个参数以替换Re.sub的函数
如何将两个变量传递给replace函数 我把它定义为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_]+\-.*\})|
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))