Si sólo está buscando para uno:
import re
match = re.search(r'href=[\'"]?([^\'" >]+)', s)
if match:
print match.group(0)
Si usted tiene una cadena larga, y quisiera que cada instancia del patrón en ella:
import re
urls = re.findall(r'href=[\'"]?([^\'" >]+)', s)
print ', '.join(urls)
Donde es s
la cadena que está buscando coincide con.
Explicación rápida de th e bits de expresiones regulares:
r'...'
es una cadena "en bruto". Te evita tener que preocuparte por escapar de los personajes tanto como lo harías normalmente. (\
especialmente - en una cadena de texto en un \
es sólo un \
En una cadena normal que tendría que hacer \\
cada vez, y que obtiene de edad en las expresiones regulares..)
"href=[\'"]?
" dice para que coincida "href =", posiblemente seguido de '
o "
. "Posiblemente" porque es difícil decir qué tan horrible es el HTML que estás mirando, y las comillas no son estrictamente necesarias.
Encerrar el siguiente bit en "()
" dice que sea un "grupo", lo que significa dividirlo y devolverlo por separado. Es solo una forma de decir "esta es la parte del patrón que me interesa".
"[^\'" >]+
" dice para que coincida con cualquier carácter que no son '
, "
, >
, o un espacio. Básicamente, esta es una lista de personajes que son el final de la URL. Nos permite evitar intentar escribir una expresión regular que coincida de manera confiable con una URL completa, lo que puede ser un poco complicado.
La sugerencia en otra respuesta para usar BeautifulSoup no es mala, pero introduce un nivel más alto de requisitos externos. Además, no te ayuda en tu objetivo declarado de aprender expresiones regulares, que supongo que este proyecto específico de análisis html es solo una parte de.
Es bastante fácil de hacer:
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html_to_parse)
for tag in soup.findAll('a', href=True):
print tag['href']
Una vez que haya instalado BeautifulSoup, de todos modos.
duplicado: http: // stackoverflow.com/questions/430966/regex-for-links-in-html-text –
He estado alejado de SO por un tiempo, es bueno ver que no me he perdido nada, y la gente SIGUE preguntando cómo analizar HTML con expresiones regulares cada maldito día. – bobince
@bobince Varias veces al día, es tan malo que he creado dos preguntas a las que puedo redirigir a las personas y una respuesta de formulario que los señala allí. –