Tengo problemas con esta expresión regular y creo que ya casi estoy allí.

m =re.findall('[a-z]{6}\.[a-z]{3}\.[a-z]{2} (?=\" target)', 'http://domain.com.uy " target')

Esto me da la salida "exacta" que quiero. eso es domain.com.uy pero obviamente esto es solo un ejemplo ya que [a-z]{6} solo coincide con los 6 caracteres anteriores y esto no es lo que quiero.

Quiero que devuelva domain.com.uy, así que básicamente la instrucción sería coincidir con cualquier carácter hasta que se encuentre "/" (hacia atrás).

Editar:

m =re.findall('\w+\.[a-z]{3}\.[a-z]{2} (?=\" target)', 'http://domain.com.uy " target')

Está muy cerca de lo que quiero pero no coincide con "_" o "-".

En aras de la integridad, no necesito el http://

Espero que la pregunta sea lo suficientemente clara, si dejo algo abierto a interpretación, ¡solicite cualquier aclaración necesaria!

¡Gracias de antemano!

2
Trufa 22 jun. 2011 a las 23:31

4 respuestas

La mejor respuesta

Otra opción es utilizar un mirada positiva detrás como (?<=//):

>>> re.search(r'(?<=//).+(?= \" target)', 
...           'http://domain.com.uy " target').group(0)
'domain.com.uy'

Tenga en cuenta que esto coincidirá con barras dentro de la propia URL, si así lo desea:

>>> re.search(r'(?<=//).+(?= \" target)',
...           'http://example.com/path/to/whatever " target').group(0)
'example.com/path/to/whatever'

Si solo desea el dominio simple, sin ningún parámetro de ruta o consulta, puede usar r'(?<=//)([^/]+)(/.*)?(?= \" target)' y capturar el grupo 1:

>>> re.search(r'(?<=//)([^/]+)(/.*)?(?= \" target)',
...           'http://example.com/path/to/whatever " target').groups()
('example.com', '/path/to/whatever')
1
Greg Haskins 22 jun. 2011 a las 20:03

Es tan simple como esto:

[^/]+(?= " target)

Pero tenga en cuenta que http://domain.com/folder/site.php no devolverá el dominio. Y recuerde escapar de la expresión regular correctamente en una cadena.

0
Leif 22 jun. 2011 a las 19:49

Si las expresiones regulares no son un requisito y simplemente desea extraer el FQDN de la URL en Python. Utilice urlparse y str.split():

>>> from urlparse import urlparse
>>> url = 'http://domain.com.uy " target'
>>> urlparse(url)
ParseResult(scheme='http', netloc='domain.com.uy " target', path='', params='', query='', fragment='')

Esto ha dividido la URL en sus partes componentes. Queremos netloc:

>>> urlparse(url).netloc
'domain.com.uy " target'

Dividir en espacios en blanco:

>>> urlparse(url).netloc.split()
['domain.com.uy', '"', 'target']

Solo la primera parte:

>>> urlparse(url).netloc.split()[0]
'domain.com.uy'
1
Johnsyweb 22 jun. 2011 a las 19:54

Intente esto (tal vez necesite escapar / en Python):

/([^/]*)$
0
Thresh 22 jun. 2011 a las 19:35