Extraer números de teléfono de un texto de forma libre en python usando regex

Tengo que extraer números de teléfono de forma libre de textos.

¿Cómo puedo manejarlo usando reg-ex en python?

He encontrado uno para extraer direcciones de correo electrónico. https://gist.github.com/dideler/5219706

He implementado el mismo enfoque utilizando una expresión regular de números telefónicos en lugar de expresiones regulares de direcciones de correo electrónico, pero no pude obtener resultados.

def get_phoneNumber(text): phone_number = "" regex = re.compile("((\(\d{3,4}\)|\d{3,4}-)\d{4,9}(-\d{1,5}|\d{0}))|(\d{4,12})") for phoneNumber in get_phoneNumbers(text, regex): phone_number = phone_number + phoneNumber + "\n" return phone_Number def get_phoneNumbers(s, regex): return (phoneNumber[0] for phoneNumber in re.findall(regex, s) 

¿Cómo me las arreglo para hacerlo?

Esta expresión regular coincide con los números de teléfono típicos de América del Norte

Partidos 3334445555, 333.444.5555, 333-444-5555, 333 444 5555, (333) 444 5555 y todas sus combinaciones, como 333 4445555, (333) 4445555 o 333444-5555. No coincide con la notación internacional +13334445555, pero coincide con la parte interna en +1 333 4445555.

 \(?\b[2-9][0-9]{2}\)?[-. ]?[2-9][0-9]{2}[-. ]?[0-9]{4}\b 

Fuente: RegexBuddy

El siguiente código de Python itera sobre todas las coincidencias

 for match in re.finditer(r"\(?\b[2-9][0-9]{2}\)?[-. ]?[2-9][0-9]{2}[-. ]?[0-9]{4}\b", subject): # match start: match.start() # match end (exclusive): match.end() # matched text: match.group() 

¿Qué patrones estás esperando?

Tienes que construir un patrón para poder coincidir con regexp. La pregunta es ¿cuál es el formato que está buscando?

Para poder hacer esto, debe investigar un poco sobre los casos de uso y cómo aparecen los números de teléfono.

Así que esperaría que definieras qué significas al hacer coincidir números de teléfono.

  • ¿Es un formato específico que busca, siempre consistente a través del texto libre?
  • ¿O puede definir la cadena con un patrón que coincida con un número de teléfono, por el código de país (+ xx) y luego un número específico de dígitos?

Solo quiero decir que hay una gran diferencia entre: – Quiero hacer coincidir los números de teléfono de un texto que puede ser de cualquier país, móvil o fijo, en cualquier formato, con espacios al azar y (,) caracteres en él o – quiero para coincidir con los números de teléfono de Hungría, con un formato xxxxxxx (espacio) + xx (espacio), que siempre es consistente.

Resumen: para poder construir un patrón con expresiones regulares y usarlo para hacer coincidir todos los números de teléfono en su texto, debe tener en cuenta las diferentes representaciones, es decir, cómo espera que se vea un número de teléfono. Si su patrón no es correcto, es posible que pierda muchos números de teléfono.

Espero que este código sirva una buena causa, V

Esto debería encontrar todos los números de teléfono en una cadena dada, incluidos los números internacionales. Tomando el ejemplo de @buckley, vamos a usar la cadena

text = “” “Matches 3334445555, 333.444.5555, 333-444-5555, 333 444 5555, (333) 444 5555 y todas sus combinaciones, como 333 4445555, (333) 4445555 o 333444-5555. No coincide con la notación internacional +13334445555, pero coincide con la parte doméstica en +1 333 4445555. “” ”

re.findall (r ‘+? (? [1-9] [0-9 .- ()] {8,} [0-9]’, texto)

  >>> re.findall(r'[\+\(]?[1-9][0-9 .\-\(\)]{8,}[0-9]', text) ['3334445555', '333.444.5555', '333-444-5555', '333 444 5555', '(333) 444 5555', '333 4445555', '(333)4445555', '333444-5555', '+13334445555', '+1 333 4445555'] 

Básicamente, la expresión regular establece estas reglas.

  1. La cadena coincidente puede comenzar con + o (símbolo
  2. Debe ir seguido de un número entre 1-9.
  3. Tiene que terminar con un número entre 0-9.
  4. Puede contener 0-9 (espacio) .- () en el medio.

Así que creo que entendí tu problema.

Esto es lo que haría en orden:

  • Conozca qué es reg-ex, sin el conocimiento básico que está perdiendo nuestro y su propio tiempo.
  • Mira esto: https://www.youtube.com/watch?v=ZdDOauFIDkw
  • Escribe lo que no sabes
  • Investigación
  • Escriba el código, proporcione una entrada de muestra para su código, cópielo en http://pastebin.com y muéstrelo, si aún no funciona.
  • repetir.