python re sub vs findall

Mi código:

import urllib import re xml = urllib.urlopen('url').read() 

Estoy interesado en eliminar ciertas tags y sus contenidos del archivo xml, por lo tanto, trato de usar expresiones regulares.

por ejemplo:

 re.findall(r'<fig(.*?)', xml, re.DOTALL) 

devuelve los partidos y no está vacío.

sin embargo,

 re.sub(r'<fig(.*?)', ' ', xml, re.DOTALL) 

no hace nada, la cadena xml no ha cambiado. Estoy confundido por qué, por favor ayuda.

El cuarto parámetro de re.sub no es una flags , sino una counts . El valor de re.DOTALL es 16 (al menos en Python 2.7 / 3.4). Por lo tanto, re.sub(.., re.DOTALL) reemplazará solo 16 veces.

Especificar flags como un argumento de palabras clave resolverá su problema:

 re.sub(r' 

Además de eso, re.sub devuelve una cadena reemplazada, no cambia el tercer argumento en el lugar. Asegúrate de volver a asignar el valor de retorno de la función.

Dado que las cadenas son inmutables en python, por lo tanto, debe asignar el resultado de re.sub a una nueva variable. Si no lo asigna a una nueva variable, no podrá obtener la salida deseada.