我正在尝试开发一个正则表达式,它将匹配python if
语句中的所有内容,等等。到目前为止,我的开头匹配为':[\n][\t]'
,但我无法弄清楚正则表达式在python中检测到if
语句的关闭。到目前为止,我能想到的最好的是[\n][^\t]
,因为我知道当换行符后面没有换行符时会退出一个块。
答案 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)
注意:此表达式也可用于匹配任何语句。例如,要匹配while循环,只需将if
替换为while
,然后删除elif
子表达式。 demo