首页 > 解决方案 > 匹配多行正则表达式以 if 开头并以以右花括号开头的行结尾

问题描述

我有一个很长的 PHP“类”,其中包含许多我想用 Python 脚本转换的 if 块。因此,我想匹配每个“父级别”if-block 并将其作为项目传递到列表中以供进一步处理。

pattern = re.compile(r'^if[^(\n\})]*\}$', re.M)
result = re.findall(pattern, filecontent)

所以我现在尝试了很多变种,到目前为止都没有成功。当然,我们在这些 if 块中有嵌套 if 语句的情况。所以我们不能只匹配到下一个右花括号。

幸运的是,代码格式清晰,因此我可以匹配多行,从以“if”开头的行开始,到行首的右花括号结束。

^if         // line starting with 'if'
[^(\n\})]*  // followed by zero or more characters that are not
            // a closing curly brace preceded by a newline character
\n\}$       // ending with a closing curlybrace preceded by \n

这种方法似乎是我最好的尝试。但它不匹配任何东西。

这是一些用于测试的片段,处理它应该会产生 3 个列表项: https ://pastebin.com/2WHC1k6f

标签: regexpython-3.xif-statementmultiline

解决方案


推荐阅读