Combinando um par de comentários em HTML usando expressões regulares
-
09-09-2019 - |
Pergunta
Eu tenho um modelo mako que é algo como isto:
% if staff:
<!-- begin staff -->
...
<!-- end staff -->
% endif
Dessa forma, se eu passar a variável pessoal como sendo verdade, esses comentários devem aparecer. Eu estou tentando testar isso usando uma expressão regular que se parece com isso:
re.search('<!-- begin staff -->.*<!-- end staff -->', text)
eu tenho verificado que os comentários aparecem na saída HTML, mas a expressão regular não corresponde. Eu mesmo tentei colocar os comentários (<!-- begin staff -->
e <!-- end staff -->
) através re.escape, mas ainda não sorte. O que estou fazendo de errado?
Ou há uma maneira melhor para executar este teste?
Solução
Por padrão .
não coincide com novas linhas -. Você precisa adicionar a opção re.DOTALL
re.search('<!-- begin staff -->.*<!-- end staff -->', text, re.DOTALL)
Se você tem mais de uma seção de pessoal, que você pode também querer fazer o jogo ungreedy:
re.search('<!-- begin staff -->.*?<!-- end staff -->', text, re.DOTALL)
Outras dicas
Use um analisador HTML como HTMLParser . Veja você pode fornecer alguns exemplos de por que é difícil para XML de análise e HTML com um regex? para o porquê.