web-dev-qa-db-fra.com

python regex .replace ()

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>'))
157
user1442957

Les expressions régulières dans Python sont gérées par le module re .

article = re.sub(r'(?is)</html>.+', '</html>', article)
239

@ 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}'
21
André Pena

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.

6
Julian

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>
2
norio