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

时间:2011-08-16 16:54:05

标签: python regex python-3.x comments

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

/**
 * This is a very short block comment
 */

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

'/\*\*[.]+?\*/'

我认为 - 与DOTALL标志的组合 - 应该这样做,但不是。它找不到任何东西。奇怪的是,当我删除尾部斜杠时,就像这样:

'/\*\*[.]+?\*'

然后它找到以下字符串:

/**\n\t*

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

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

顺便说一句,我也遇到了this!有人试图用Java做同样的线程。最后的胜利答案以我现在的方式完成了他的正则表达式,所以我很无能为力:(这可能是Python正则表达式中的错误还是我完全错过了什么?

非常感谢任何帮助! :d

2 个答案:

答案 0 :(得分:4)

您可以使用re.DOTALL标记使.个字符与换行符匹配:

re.compile(r'/\*\*.+?\*/', re.DOTALL)

(作为旁注,PHP块注释可以从/*开始,而不仅仅是/**。)

答案 1 :(得分:0)

试试这个:

r'\/\*\*[^*]*\*+([^/][^*]*\*+)*\/'

(这是/* CSS comments */的一些CSS解析器使用的正则表达式,所以我相信它非常可靠)

它与包括换行符和内部星号在内的确切格式不匹配,但您可以解决它。这将匹配:

/**
 * This is a very short block comment
 */

但是:

/** This is a very short block comment */

甚至:

/** This is a very short block comment 
*/

要匹配docblock的确切格式,您需要一个真正的解析器,而不是正则表达式。