if语句在python正则表达式替换中

时间:2016-06-23 18:02:58

标签: python regex perl python-3.x

我有一个搜索thisthat的正则表达式。如果找到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或者最好的选择是什么。

1 个答案:

答案 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   )