首页 > 解决方案 > 在正则表达式 Python 中选择

问题描述

我正在编写一个正则表达式来查找这样的代码:

if condition:True:
    statements

第一个冒号代替==. 到目前为止,我已经想到了这个:r"(if|elif) .* : .* :\n\t"
但我想找到一种方法来选择第一个:并将其替换为==. 问题是,我无法找到一种方法来使用正则表达式来替代而不会无意中:通过编写一个:替换整个if condition==

re.sub(r"(if|elif) .* : .* :\n\t","==",text)

或 b:将我脚本中的每个冒号替换为==,这将导致类似的错误

NameError: Expected a ':', received '=='

那么,有没有办法只用 替换一点正则表达式==,还是有另一种我忽略的方法来做到这一点?
应该发生什么
输入:

if 3+4:7:
     print("Three plus four is actually seven")
elif 3+6:10:
    print("3+4 is not 7, yet 3+6=10")


安慰:
Three plus four is actually seven

顺便说一下,这是 Python 3。

标签: pythonregexsyntax

解决方案


尝试将所有从最后一个if到最后一个的所有内容匹配到一个匹配组中,类似地,将最后一个到最后一个的所有内容匹配到另一个组中。现在您可以替换第一个匹配,然后替换下一个匹配elif::==

re.sub('((?:if|elif)[^:]*):([^:]*:)', r'\1 == \2', s)

推荐阅读