正则表达式匹配Python If语句中的所有内容

时间:2015-11-07 21:03:00

标签: python regex

我正在尝试开发一个正则表达式,它将匹配python if语句中的所有内容,等等。到目前为止,我的开头匹配为':[\n][\t]',但我无法弄清楚正则表达式在python中检测到if语句的关闭。到目前为止,我能想到的最好的是[\n][^\t],因为我知道当换行符后面没有换行符时会退出一个块。

1 个答案:

答案 0 :(得分:3)

这应该用ast完成,我没有看到使用正则表达式匹配if语句的重点。

我当然不建议在这里使用正则表达式。但是,可以使用正则表达式完成。我们的想法是捕获用于缩进if声明的空格,并使用反向引用\1来要求相同的缩进和以下行中至少一个空格。

以下正则表达式是一个涵盖最简单语句的示例。例如,它将失败多行三引号字符串。你可以从这里开始工作:

pattern = re.compile(r'''
    #if statement (group 1 captures the indentation)
    ^([ \t]*)  if\b  .*  $

    #code
    (?:
        #comments with any indentation
        (?:
            \s*?
            \n  [ \t]*  [#].* 
        )*

        #Optional elif/else lines
        (?:
            \s*?
            \n\1  el(?:se|if)\b  .*  $
        )?

        #following lines with more indentation
        \s*?
        \n\1  [ \t]  .*
    )*

    \n? #last newline char
''', re.MULTILINE | re.VERBOSE)

regex101 demo ideone demo

注意:此表达式也可用于匹配任何语句。例如,要匹配while循环,只需将if替换为while,然后删除elif子表达式。 demo