2011-08-14 21 views
18

Si todo lo que tengo es una cadena de 10 o más dígitos, ¿cómo puedo formatear esto como un número de teléfono?¿Cuál es la mejor forma de formatear un número de teléfono en Python?

Algunos ejemplos triviales:

555-5555 
555-555-5555 
1-800-555-5555 

Sé que los que no son las únicas formas de formatear ellos, y es muy probable que voy a dejar las cosas si lo hago yo mismo. ¿Hay una biblioteca de Python o una forma estándar de formatear números de teléfono?

+5

¿De qué rango pueden provenir? Los diferentes países tienen diferentes convenciones para formatear los números de teléfono. –

+4

Secundado. No escriba código que asuma que todos los números de teléfono están en formato estadounidense. Es realmente irritante intentar trabajar con programas como ese. – snap

+1

Parece que la forma estándar de escribir números de teléfono se llama E.123. Entonces, un número nacional se ve como '(800) 555 5555', y un número internacional se ve como' +1 800 555 5555'. Pero no olvide que la duración de los diferentes grupos varía según el país. http://en.wikipedia.org/wiki/E.123 –

Respuesta

32

para la biblioteca: phonenumbers (pypi, source)

Versión de Python de la biblioteca común de Google para analizar, formatear, almacenar y validar números de teléfono internacionales.

El archivo léame es insuficiente, pero encontré que el código está bien documentado.

+15

Para aquellos que buscan la respuesta rápida, aquí hay una muestra con un número de EE. UU. 'pip install phonenumbers' then' '' import phonenumbers phonenumbers.format_number (phonenumbers.parse ("8006397663", 'US'), phonenumbers.PhoneNumberFormat.NATIONAL) '' ' –

+1

¿Cómo usar el formato personalizado en esta biblioteca? Necesito {CountryCode} - \ d {3} - {remaining_numbers} – Crusader

+0

El archivo léame en github es genial. https://github.com/daviddrysdale/python-phonenumbers – Ryan

0

Una solución simple podría ser comenzar por la parte posterior e insertar el guión después de cuatro números, luego hacer grupos de tres hasta que se llegue al principio de la cadena. No conozco una función incorporada ni nada de eso.

Es posible resultado útil: http://www.diveintopython3.net/regular-expressions.html#phonenumbers

Las expresiones regulares serán útiles si acepta la entrada del usuario de números de teléfono. No utilizaría el enfoque exacto seguido en el enlace de arriba. Algo más simple, como simplemente quitar los dígitos, es probablemente más fácil e igual de bueno.

Además, insertar comas en números es un problema análogo que se ha resuelto eficientemente en otros lugares y podría adaptarse a este problema.

+0

link to book is dead –

+0

He reparado el enlace. – ChrisP

19

parece que sus ejemplos formateados con tres grupos de dígitos, excepto la última, puede escribir una función simple, utiliza miles separador y agrega último dígito:

>>> def phone_format(n):                                 
...  return format(int(n[:-1]), ",").replace(",", "-") + n[-1]                           
... 
>>> phone_format("5555555") 
'555-5555' 
>>> phone_format("5555555") 
'555-5555' 
>>> phone_format("5555555555") 
'555-555-5555' 
>>> phone_format("18005555555") 
'1-800-555-5555' 
2

Aquí hay uno adaptado de utdemir's solution y this solution que funcionará con Python 2.6, ya que el formateador "," es nuevo en Python 2.7.

def phone_format(phone_number): 
    clean_phone_number = re.sub('[^0-9]+', '', phone_number) 
    formatted_phone_number = re.sub("(\d)(?=(\d{3})+(?!\d))", r"\1-", "%d" % int(clean_phone_number[:-1])) + clean_phone_number[-1] 
    return formatted_phone_number 
Cuestiones relacionadas