Python 3正则表达式查找多行注释

lun*_*oko 3 python regex comments python-3.x

我正在尝试使用 Python 3 中的正则表达式在 PHP 源代码中查找注释块。PHP 注释采用以下格式:

/**
 * This is a very short block comment
 */
Run Code Online (Sandbox Code Playgroud)

现在我想出了以下正则表达式:

'/\*\*[.]+?\*/'
Run Code Online (Sandbox Code Playgroud)

我认为 - 与 DOTALL 标志结合 - 应该可以做到这一点,但没有。它没有找到任何东西。奇怪的是,当我删除尾部斜杠时,如下所示:

'/\*\*[.]+?\*'
Run Code Online (Sandbox Code Playgroud)

然后它找到以下字符串:

/**\n\t*
Run Code Online (Sandbox Code Playgroud)

我不知道为什么正则表达式找不到星号后跟斜杠...我检查了我正在搜索的文件以仔细检查我的评论中没有拼写错误(我没有)。另外,斜杠在正则表达式中不是特殊字符,所以我不必转义它。(我尝试过,但没有帮助。)

谁能告诉我我的正则表达式有什么问题吗?:)

顺便说一句,我也遇到过这个!有人试图在 Java 中做同样的事情的线程。最终的获胜答案以我现在的方式完成了他的正则表达式,所以我一无所知:(这可能是Python正则表达式中的一个错误还是我完全错过了一些东西?

任何帮助深表感谢!:D

jtb*_*des 5

您可以使用该re.DOTALL标志使.字符匹配换行符:

re.compile(r'/\*\*.+?\*/', re.DOTALL)
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,PHP 块注释可以以 开头/*,而不仅仅是/**。)