2009-04-16 3 views
1

У меня есть мако шаблон, который выглядит примерно так:Matching пару комментариев в HTML с использованием регулярных выражений

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

Таким образом, если я передать переменную персонала как быть, правда, эти комментарии должны появиться. Я пытаюсь проверить это с помощью регулярного выражения, которое выглядит следующим образом:

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

Я подтвердил, что комментарии в выводе HTML, но регулярное выражение не совпадает. Я даже попробовал поставить комментарии (и <!-- end staff -->) через re.escape, но все равно не повезло. Что я делаю не так?

Или есть лучший способ запустить этот тест?

ответ

9

По умолчанию . не соответствует новой строке - вам нужно добавить опцию re.DOTALL.

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

Если у вас есть более чем один раздел персонала, вы также можете сделать матч ungreedy:

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

спасибо. Я подумал, что это было что-то глупое. :-) –

2

Используйте HTML Parser как HTMLParser вместо этого. См. Can you provide some examples of why it is hard to parse XML and HTML with a regex?.

+0

Отличная точка. Для целей, которые я использую для этого, достаточно простого регулярного выражения. Если мне нужно сделать что-нибудь более сложное, это хорошо иметь в виду. –

+0

Дело в том, что простого регулярного выражения никогда не бывает достаточно даже для простого взгляда. –