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

正则表达式匹配Python If语句中的所有内容,python,regex,Python,Regex,我正在尝试开发一个正则表达式,它将匹配pythonif语句中的所有内容,诸如此类。到目前为止,我的起始匹配为:[\n][\t]',但我无法找出正则表达式来检测python中if语句的关闭。到目前为止,我能想到的最好方法是[\n][^\t],因为我知道当换行符后面没有一个制表符时,会退出一个块。这应该用它来完成,我看不到使用regex匹配if语句的意义 我当然不建议在这里使用正则表达式。但是,它可以通过正则表达式完成。其思想是捕获用于缩进if声明的空格,并使用backreference\1来要求相

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

这应该用它来完成,我看不到使用regex匹配if语句的意义

我当然不建议在这里使用正则表达式。但是,它可以通过正则表达式完成。其思想是捕获用于缩进if声明的空格,并使用backreference
\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)



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

您是否考虑过改用
ast
?实际上,缩进下降时会退出一个块。不需要制表符。在一般情况下,这很困难。考虑评论(可以在LH边界),这里的文件只是两个困难之间的许多。正如roippi所述——use
ast
@TomZych:
当缩进下降时,块退出
并不总是这样。注释可以是任何缩进假设所有内容都被正确地标记,并且注释不被考虑,有没有办法?