首页 > 解决方案 > Python regex (.*?) 没有给出输出

问题描述

我正在制作一个项目,其中一部分是将 python 文件作为文本文件接收并使用正则表达式对其进行解析。

我能够很好地使用它(其中程序是一个包含换行符的代码的字符串):

findall(r"def (.*?)\((.*?)\)", program)

但是当我期望它给出一个匹配对象时,这一行只给出了 None,其中 .group() 返回“func1(None, None)”

mainblock = search(r'if __name__ == "__main__":(.*?)#END', program)

我正在解析的python文件的缩写版本如下:

def func1(stuff, morestuff):
    pass

if __name__ == "__main__":
    func1(None, None)
#END

我已经检查了正则表达式本身的任何差异,但我找不到任何差异。我还尝试直接从代码文件中复制/粘贴它,但仍然找不到匹配项

标签: regexpython-3.x

解决方案


\n您需要在正则表达式中包含换行符,如下所示,

r'if __name__ == "__main__":\n(.*?)\n#END'

或启用DOTALL标志,这意味着它.也匹配换行符。

MULTILINE意思是别的东西,这可能是违反直觉的。)


推荐阅读