我有一个搜索this
或that
的正则表达式。如果找到this
,则会将其替换为ONE
。如果找到that
,则会将其替换为TWO
。
这是Perl中的样子:
m =~ s/(this)|(that)/ "ONE" x!! $1 . "TWO" x!! $2 /eg
e
是 eval 选项。 .
是串联。 x!!
充当if语句。
我如何在Python 3中做同样的事情?我正在寻找类似的东西:
m = re.sub(r"(this)|(that)", ("ONE" * bool(match.group(1))) + ("TWO" * bool(match.group(2))), m, flags=re.EVAL)
我想我有两个主要障碍。首先,我不知道如何在正则表达式替换中获取match
对象。其次,我不知道python是否支持eval或者最好的选择是什么。
答案 0 :(得分:4)
Python没有与正则表达式相关的奇怪的语言语法 - 它们是在行为良好的函数调用中执行的。
因此,不是在match上执行的调用参数的一部分,你所拥有的是一个回调函数:你所要做的就是将一个可调用对象作为第二个参数,而不是替换字符串。 callable接收匹配对象作为其唯一参数。
在这种情况下,你只需要一个内联if
- 所以你甚至可以将callable定义为lambda表达式:
t = "this this that"
m = re.sub(r"(this)|(that)", lambda x: "ONE" if x.group() == "this" else "TWO", t )