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