Каков наилучший способ форматирования номера телефона в Python?

Если все, что у меня есть, это строка из 10 или более цифр, как я могу отформатировать это как номер телефона?

некоторые тривиальные примеры:

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

Я знаю, что это не единственные способы их форматирования, и очень вероятно, что я оставлю вещи, если я сделаю это сам. Есть ли библиотека python или стандартный способ форматирования телефонных номеров?

4 ответов


для библиотеки: номера телефонов (pypi, источник)

Python версия общей библиотеки Google для анализа, форматирования, хранения и проверки международных телефонных номеров.

readme недостаточно, но я обнаружил, что код хорошо документирован.


похоже, что ваши примеры отформатированы с трехзначными группами, кроме последнего, вы можете написать простую функцию, Использовать тысячу разделителей и добавить последнюю цифру:

>>> 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'

вот еще один адаптированный utdemir это и данное решение это будет работать с Python 2.6, так как форматирование", " является новым в 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"-", "%d" % int(clean_phone_number[:-1])) + clean_phone_number[-1]
    return formatted_phone_number

простое решение может заключаться в том, чтобы начать сзади и вставить дефис после четырех чисел, а затем сделать группы из трех до начала строки. Я не знаю о встроенной функции или что-то в этом роде.

вы можете найти это полезным: http://www.diveintopython3.net/regular-expressions.html#phonenumbers

регулярные выражения будут полезны, если вы принимаете пользовательского ввода телефонных номеров. Я бы не использовал точное подход по ссылке выше. Что-то более простое, например, просто удаление цифр, вероятно, проще и так же хорошо.

кроме того, вставка запятых в числа является аналогичной проблемой, которая была эффективно решена в другом месте и может быть адаптирована к этой проблеме.