使用正则表达式在HTML中匹配一对注释

时间:2009-04-16 16:17:03

标签: python regex unit-testing mako

我有一个看起来像这样的mako模板:

% if staff:
    <!-- begin staff -->
    ...
    <!-- end staff -->
% endif

这样,如果我将staff变量传递为True,那么这些注释应该出现。我试图通过使用如下所示的正则表达式来测试它:

re.search('<!-- begin staff -->.*<!-- end staff -->', text)

我已经确认评论出现在HTML输出中,但正则表达式不匹配。我甚至尝试通过re.escape放置评论(<!-- begin staff --><!-- end staff -->),但仍然没有运气。我做错了什么?

或者有更好的方法来运行此测试吗?

2 个答案:

答案 0 :(得分:9)

默认情况下.与换行符不匹配 - 您需要添加re.DOTALL选项。

re.search('<!-- begin staff -->.*<!-- end staff -->', text, re.DOTALL)

如果您有多个职员部分,您可能还希望不匹配地进行匹配:

re.search('<!-- begin staff -->.*?<!-- end staff -->', text, re.DOTALL)

答案 1 :(得分:2)

使用像HTMLParser这样的HTML解析器。有关原因,请参阅Can you provide some examples of why it is hard to parse XML and HTML with a regex?