Me resulta difícil encontrar una expresión regular para extraer una cadena de dígitos (por ejemplo, 56478888) de una URL. Ejemplos de entrada:

http://wwww.example/f-1234565-auc56478888.html#his
http://wwww.example/f-1234565-auc56478888.html
http://wwww.example/f-1234565-56478888.html

Como puede ver, a veces hay caracteres antes de la cadena de dígitos y a veces hay caracteres después de ".html".

La expresión regular que se me ocurrió es la siguiente:

re.compile(".*?/f\-\d+\-(\d+)\.html") 

Pero no coincide con todos los casos. ¿Cómo puedo arreglar mi expresión regular?

0
user10508851 16 oct. 2018 a las 15:52

2 respuestas

La mejor respuesta

Suponiendo que desea el segundo grupo de números, puede usar findall:

import re

urls = ["http://wwww.example/f-1234565-auc56478888.html#his",
        "http://wwww.example/f-1234565-auc56478888.html",
        "http://wwww.example/f-1234565-56478888.html"]

pattern = re.compile("\d+")
print([matches[-1] for matches in map(pattern.findall, urls)])

Salida

['56478888', '56478888', '56478888']

El patrón "\d+" simplemente coincide con todos los grupos de dígitos. Como alternativa, puede buscar el grupo de dígitos justo antes de ".html":

pattern = re.compile("(\d+)\.html")
print([match.group(1) for match in map(pattern.search, urls)])

Salida

['56478888', '56478888', '56478888']
0
Dani Mesejo 16 oct. 2018 a las 12:59

Pruebe el patrón r"\d{8}"

Ej:

import re

s = ["http://wwww.example/f-1234565-auc56478888.html#his", "http://wwww.example/f-1234565-auc56478888.html", "http://wwww.example/f-1234565-56478888.html"]

for i in s:
    print(re.findall(r"\d{8}", i))    #8 digits

Salida:

['56478888']
['56478888']
['56478888']
0
Rakesh 16 oct. 2018 a las 12:58