Python - Localizar Telefonos con expresiones regulares

 
Vista:
Imágen de perfil de Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Localizar Telefonos con expresiones regulares

Publicado por Pepe (16 intervenciones) el 05/06/2017 12:49:38
Hola a todos,

Estoy empezando a trabajar con expresiones regulares para localizar segun que datos dentro de un texto, y la cuestion es que con la busqueda de palabras, correos electronicos o url, voy obteniendo resultados, pero no consigo obtener numeros de telefonos

Lo estoy haciendo asi:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import re
 
archivo_url = open("texto.txt", "r")
 
texto = archivo_url.read()
 
archivo_url.close()
 
patron_telefonos = re.compile(r'(/^((\+?34([ \t|\-])?)?[9|6|7]((\d{1}([ \t|\-])?[0-9]{3})|(\d{2}([ \t|\-])?[0-9]{2}))([ \t|\-])?[0-9]{2}([ \t|\-])?[0-9]{2})$/)')
 
lista_telefonos = patron_telefonos.findall(texto)
 
for i in lista_telefonos:
 
    print i


He probado con diferentes expresiones regulares que he encontrado en internet, que se suponen que filtran telefonos, ya sean fijo o moviles, pero con ninguna obtengo resultados aun habiendo telefonos en el texto que previamente he metido yo en todos los formatos posibles.
Con el mismo codigo, pero cambiando la expresion regular para correos electronicos o urls, funciona perfectamente, por lo que supongo que sera un problema ligado a la busqueda de números, pero no encuentro nada sobre el tema, a ver si alguien puede orientarme.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Localizar Telefonos con expresiones regulares

Publicado por kip (257 intervenciones) el 05/06/2017 13:27:15
Hola, podrías colocar un poco del contenido del archivo donde están los datos ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Pepe
Val: 33
Ha disminuido su posición en 4 puestos en Python (en relación al último mes)
Gráfica de Python

Localizar Telefonos con expresiones regulares

Publicado por Pepe (16 intervenciones) el 05/06/2017 23:53:56
Se trata de un archivo de texto con una frase en cada linea:

Mañana me iré de viaje a Madrid
El Madrid otra vez campeón de copa
Mi teléfono es 600678899
Me puedes mandar el mensaje a [email protected]
Mi nuevo número es el 678.000.102
Si llamas desde fuera de españal +34.708.56.78.98

El caso es que los correos y urls los extrae perfectamente, pero los teléfonos no....
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Andres Leonardo
Val: 113
Ha disminuido su posición en 2 puestos en Python (en relación al último mes)
Gráfica de Python

Localizar Telefonos con expresiones regulares

Publicado por Andres Leonardo (40 intervenciones) el 06/06/2017 16:44:16
los correos y las url ... tienen una estructura en este caso el problema es que el numero a veces tiene separadores numeros... unos .
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 1.120
Bronce
Ha mantenido su posición en Python (en relación al último mes)
Gráfica de Python

Localizar Telefonos con expresiones regulares

Publicado por kip (257 intervenciones) el 06/06/2017 17:45:42
Es algo complicado lidiar con un patron que posiblemente deba cambiar por cada numero de telefono, he hecho algo que quizas te sirva:

1
2
3
4
5
6
7
8
9
10
11
12
13
import re
 
texto = '''Mañana me iré de viaje a Madrid
El Madrid otra vez campeón de copa
Mi teléfono es 600678899
Me puedes mandar el mensaje a pepitoperez@Gmail.Com
Mi nuevo número es el 678.000.102
Si llamas desde fuera de españal +34.708.56.78.98'''
 
listadoTelfs = list(map(lambda posibTelf: re.sub(r'\D', '', posibTelf), re.findall(r'\b[\d\.]+\b', texto)))
listadoTelfs = list(filter(bool, listadoTelfs))
 
print(listadoTelfs)

1
['600678899', '678000102', '34708567898']
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar