0

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

<# 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
#>

“<# #>”确定块注释的开始和结束。我在我的应用程序中使用 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 似乎与多行注释不匹配。我是否缺少某种选项或标志?

4

2 回答 2

3

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

re.search(r'<#(.*?)#>', comment, re.DOTALL).group(1)
于 2013-08-30T02:26:42.683 回答
0

首先,如果'(.*)?'应该是非贪婪的,那么任何匹配都是合格的。它是贪婪匹配任何(匹配尽可能多),然后是可选的限定符(没有效果)。这将从第一个“<#”开始匹配,并且只匹配第一个换行符之后的空格。然后匹配这些规范中的最后一个“#>”。这是我的解决方案:

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

它捕获开瓶器,然后匹配对中的任何文本,只要更接近的似乎不是下一组字符,最后匹配更接近的。

于 2013-08-30T02:51:02.580 回答