sub online example ejemplos python regex string tags

online - python split regex



Python-Regex-Cómo encontrar una cadena entre dos conjuntos de cadenas (4)

¡Analizar HTML con expresiones regulares es una mala idea!

Piensa en la siguiente pieza de html

<a></a > <!-- legal html, but won''t pass your regex --> <a href="/sitemap">Sitemap<!-- proof that a>b iff ab>1 --></a>

Hay muchos más ejemplos de este tipo. Las expresiones regulares son buenas para muchas cosas, pero no para analizar HTML.

Debería considerar usar el analizador de HTML de Python de Beautiful Soup .

De todos modos, una solución ad-hoc usando regex es

import re data = """ <div id=hotlinklist> <a href="foo1.com">Foo1</a> <div id=hotlink> <a href="/">Home</a> </div> <div id=hotlink> <a href="/extract">Extract</a> </div> <div id=hotlink> <a href="/sitemap">Sitemap</a> </div> </div> """ e = re.compile(''<a *[^>]*>.*</a *>'') print e.findall(data)

Salida:

>>> e.findall(data) [''<a href="foo1.com">Foo1</a>'', ''<a href="/">Home</a>'', ''<a href="/extract">Extract</a>'', ''<a href="/sitemap">Sitemap</a>'']

Considera lo siguiente:

<div id=hotlinklist> <a href="foo1.com">Foo1</a> <div id=hotlink> <a href="/">Home</a> </div> <div id=hotlink> <a href="/extract">Extract</a> </div> <div id=hotlink> <a href="/sitemap">Sitemap</a> </div> </div>

¿Cómo harías para sacar la línea del mapa del sitio con expresiones regulares en python ?

<a href="/sitemap">Sitemap</a>

Lo siguiente puede usarse para extraer las etiquetas de anclaje.

''/<a(.*?)a>/i''

Sin embargo, hay varias etiquetas de anclaje. También hay múltiples enlaces de acceso rápido, así que tampoco podemos usarlos realmente?


No use una expresión regular. Use BeautfulSoup , un analizador de HTML.

from BeautifulSoup import BeautifulSoup html = / """ <div id=hotlinklist> <a href="foo1.com">Foo1</a> <div id=hotlink> <a href="/">Home</a> </div> <div id=hotlink> <a href="/extract">Extract</a> </div> <div id=hotlink> <a href="/sitemap">Sitemap</a> </div> </div>""" soup = BeautifulSoup(html) soup.findAll("div",id="hotlink")[2].a # <a href="/sitemap">Sitemap</a>


Para extraer el contenido del lema:

<a href="/sitemap">Sitemap</a>

... Yo usaría:

>>> import re >>> s = '''''' <div id=hotlinklist> <a href="foo1.com">Foo1</a> <div id=hotlink> <a href="/">Home</a> </div> <div id=hotlink> <a href="/extract">Extract</a> </div> <div id=hotlink> <a href="/sitemap">Sitemap</a> </div> </div>'''''' >>> m = re.compile(r''<a href="/sitemap">(.*?)</a>'').search(s) >>> m.group(1) ''Sitemap''


Use BeautifulSoup o lxml si necesita analizar HTML.

Además, ¿qué es lo que realmente necesitas hacer? Encuentra el último enlace? Encuentra el tercer enlace? Encuentra el enlace que apunta a / sitemap? No está claro por tu pregunta. ¿Qué necesitas hacer con los datos?

Si realmente tiene que usar expresiones regulares, eche un vistazo a findall .