47 votes

Python: Remplacer avec la regex

J'ai besoin de remplacer une partie d'une chaîne. J'étais à la recherche par le biais de la documentation Python et retrouvés.sous.

import re
s = '<textarea id="Foo"></textarea>'
output = re.sub(r'<textarea.*>(.*)</textarea>', 'Bar', s)
print output

>>>'Bar'

Je m'attendais à ce genre d'imprimer '<textarea id="Foo">Bar</textarea>' et pas de "bar".

Quelqu'un pourrait-il me dire ce que j'ai fait de mal?

79voto

Mark Byers Points 318575

Au lieu de capturer la pièce que vous souhaitez remplacer vous pouvez capturer les pièces que vous souhaitez conserver , puis reportez-vous à l'aide d'une référence \1 pour les inclure dans la nouvelle chaîne.

Essayez plutôt ceci:

output = re.sub(r'(<textarea.*>).*(</textarea>)', r'\1Bar\2', s)

Aussi, en supposant que c'est du HTML, vous devez envisager d'utiliser un analyseur HTML pour cette tâche, par exemple Belle Soupe.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X