在python中匹配多行注释

时间:2013-08-30 02:16:49

标签: python regex pyqt pyside

我正在尝试匹配看起来像这样的多行/块注释

<# This is a multiline comment
This is a multiline comment
This is a multiline comment
This is a multiline comment
This is a multiline comment
#>

“&lt; ##&gt;”确定块注释的开始和结束。我在我的应用程序中使用PySide,并且如此使用QRegExp函数:

multiline_comment =    r'<#(.*)?#>'
comment_ml_syntax  = QtCore.QRegExp(Syntax.comment_ml_match)
comment_ml_format  = QtGui.QTextCharFormat()
comment_ml_format.setForeground(Colors.COMMENT_COLOR)

QRegExp似乎与多行注释不匹配。是否有某种我缺少的选项或旗帜?

2 个答案:

答案 0 :(得分:3)

只需传入re.DOTALL标记,即可捕获开始和结束标记之间的所有内容。 re.DOTALL确保.也匹配换行符。并使用非贪婪量词?来确保您的匹配不会超过一条评论

re.search(r'<#(.*?)#>', comment, re.DOTALL).group(1)

答案 1 :(得分:0)

首先,如果'(.*)?'应该是非贪婪的,那么任何匹配的资格都不是'。它是贪婪的匹配(尽可能匹配),然后是可选的限定符(没有效果)。这将匹配第一个“&lt;#”并且仅在第一个换行符后匹配空格。然后匹配最后一个“#&gt;”在那些规范内。这是我的解决方案:

r"<#((?!#>)(.|\s))*#>"

它捕获开启者,然后匹配对中的任何文本,只要近距离看起来不是下一组字符,最后匹配更接近的。