J'essaie de tout récupérer après la balise "</ html>" et de le supprimer, mais mon code ne semble rien faire. Est-ce que .replace()
ne supporte pas regex?
z.write(article.replace('</html>.+', '</html>'))
Les expressions régulières dans Python sont gérées par le module re
.
article = re.sub(r'(?is)</html>.+', '</html>', article)
@ Ignácio a raison, +1, je fournirai plus d'exemples.
Pour remplacer le texte par une expression régulière, utilisez la fonction re.sub :
sous (modèle, repl, chaîne [ nombre, drapeaux])
Il remplacera les occurrences non répétitives de pattern
par le texte passé en tant que string
. Si vous devez analyser la correspondance pour extraire des informations sur des captures de groupe spécifiques, pour isntance, vous pouvez transmettre une fonction à l'argument string
. plus d'infos ici .
Exemples
>>> import re
>>> re.sub(r'a', 'b', 'banana')
'bbnbnb'
>>> re.sub(r'/\d+', '/{id}', '/andre/23/abobora/43435')
'/andre/{id}/abobora/{id}'
Vous pouvez utiliser le module re
pour les expressions rationnelles, mais ces dernières sont probablement excessives pour ce que vous voulez. Je pourrais essayer quelque chose comme
z.write(article[:article.index("</html>") + 7]
Ceci est beaucoup plus propre et devrait être beaucoup plus rapide qu'une solution à base de regex.
Dans ce cas particulier, si le module re
est excessif, pourquoi ne pas utiliser la méthode split
(ou rsplit
) comme
se='</html>'
z.write(article.split(se)[0]+se)
Par exemple,
#!/usr/bin/python
article='''<html>Larala
Ponta Monta
</html>Kurimon
Waff Moff
'''
z=open('out.txt','w')
se='</html>'
z.write(article.split(se)[0]+se)
sorties out.txt
comme
<html>Larala
Ponta Monta
</html>