正则表达式匹配Python If语句中的所有内容
我正在尝试开发一个正则表达式,它将匹配python正则表达式匹配Python If语句中的所有内容,python,regex,Python,Regex,我正在尝试开发一个正则表达式,它将匹配pythonif语句中的所有内容,诸如此类。到目前为止,我的起始匹配为:[\n][\t]',但我无法找出正则表达式来检测python中if语句的关闭。到目前为止,我能想到的最好方法是[\n][^\t],因为我知道当换行符后面没有一个制表符时,会退出一个块。这应该用它来完成,我看不到使用regex匹配if语句的意义 我当然不建议在这里使用正则表达式。但是,它可以通过正则表达式完成。其思想是捕获用于缩进if声明的空格,并使用backreference\1来要求相
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所述——useast
@TomZych:当缩进下降时,块退出
并不总是这样。注释可以是任何缩进假设所有内容都被正确地标记,并且注释不被考虑,有没有办法?