我正在尝试匹配看起来像这样的多行/块注释
<# 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似乎与多行注释不匹配。是否有某种我缺少的选项或旗帜?
答案 0 :(得分:3)
只需传入re.DOTALL
标记,即可捕获开始和结束标记之间的所有内容。 re.DOTALL
确保.
也匹配换行符。并使用非贪婪量词?
来确保您的匹配不会超过一条评论
re.search(r'<#(.*?)#>', comment, re.DOTALL).group(1)
答案 1 :(得分:0)
首先,如果'(.*)?'
应该是非贪婪的,那么任何匹配的资格都不是'。它是贪婪的匹配(尽可能匹配),然后是可选的限定符(没有效果)。这将匹配第一个“&lt;#”并且仅在第一个换行符后匹配空格。然后匹配最后一个“#&gt;”在那些规范内。这是我的解决方案:
r"<#((?!#>)(.|\s))*#>"
它捕获开启者,然后匹配对中的任何文本,只要近距离看起来不是下一组字符,最后匹配更接近的。