print - python string format replace
¿Cuál es la mejor manera de formatear un número de teléfono en Python? (4)
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?
Algunos ejemplos triviales:
555-5555
555-555-5555
1-800-555-5555
Sé que no son las únicas formas de darles formato, y es muy probable que deje de lado las cosas si lo hago yo mismo. ¿Existe una biblioteca de Python o una forma estándar de formatear números de teléfono?
Aquí hay uno adaptado de la solución de utdemir y esta solución 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
Parece que sus ejemplos formateados con grupos de tres dígitos, excepto el último, puede escribir una función simple, usa miles de separadores y agrega el ú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''
Una solución simple podría ser comenzar desde atrás e insertar el guión después de cuatro números, luego hacer grupos de tres hasta llegar al principio de la cadena. No tengo conocimiento de una función incorporada ni nada de eso.
Puede encontrar esto útil: http://www.diveintopython3.net/regular-expressions.html#phonenumbers
Las expresiones regulares serán útiles si está aceptando entradas de usuario de números de teléfono. No usaría el enfoque exacto seguido en el enlace anterior. Algo más simple, como simplemente eliminar dígitos, es probablemente más sencillo y bueno.
Además, insertar comas en números es un problema análogo que se ha resuelto de manera eficiente en otros lugares y podría adaptarse a este problema.