Expresiones regulares

dvilla en gmx.net dvilla en gmx.net
Mie Ene 14 10:38:37 CET 2004



Hola:

Se me ocurre que podrías usar una XSL para eliminar los tags que no te interesen
y substituirlos si quieres por un único tag nuevo que después te sirva de
referencia; el único problema es que el fichero origen tiene que ser un "XML
bien formado", es decir, un XHTML.

De todas formas, suena a problema que se pueda resolver con un parser
específico de XML o HTML. ¿Puedes poner un ejemplo pequeño con un fichero HTML
completo y la salida completa que esperas conseguir?

Saludos


El Wed, 14 Jan 2004 09:11:14 +0100
Sergi Faber <sfaber en fecemd.org> escribió:

> Hola,
> 
> Estoy atascado con las expresiones regulares. Estoy empezando a aprender su
> manejo pero hay un tema concreto en el que no veo la luz. Me interesa extraer
> todo el texto entre tags de un fichero HTML, pero conservando algunos
> relativos a la presentación como '<b>', '</b>', '<i>', '</i>', '<cite>', etc.
> Por ejemplo, si tenemos:
> 
> '<p><b>hoy</b> pareces <i>triste</i></p>'
>  
> Necesito recuperar:
> 
> '<b>hoy</b> pareces <i>triste</i>'
> 
> Por ahora he intentado algo parecido a esta función:
> 
> def processa(regexp):
>     for file in glob.glob('*.html' ):
>     f=open(file)
>     f1=f.read()
>     f.close()
>     f1=" ".join(f1.split())
>     L1=re.split(regexp,f1)
>     [...]
> 
> Con: 
> 
> processa('<.*?>')
> 
> recupero en la lista todo el texto, pero no me conserva los tags citados
> anteriormente:
> 
> L1: [..., 'hoy', ' pareces ', 'triste', ...]
> 
> Si pongo, por probar algo:
> 
> processa('<[^biu]*?>')
> 
> L1: [...,'<b>hoy</b> pareces <i>triste</i>',...]
> 
> Parece funcionar mejor, pero recupera también otros tags que no interesan como
> '<title>Prueba</title>' y otros que también contienen la "b" o la "i" por
> ejemplo.
> 
> ¿Hay alguna manera de indicarle que trocee, excepto cuando encuentre los tags
> que le indico? Y ya de paso ¿Se puede indicar en una expresión regular que
> recupere TODO un texto menos determinadas palabras? Con [^ab] le indico que no
> recupere la 'a' o la 'b' y lo mismo para una secuencia determinada, pero ¿cómo
> le indico que no recupere 'gato' o 'liebre', por ejemplo?
> 
> Bueno, disculpad la extensión. Ya se que no es una pregunta específica de
> Python y que igual es una simpleza, pero una ayuda me vendría genial.
> 
> Gracias,
> 
> -- 
> Sergi Faber
> 




Más información sobre la lista de distribución Python-es