Подтвердить что ты не робот

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

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

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

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

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

4b9b3361

Ответ 1

для библиотеки: phonenumbers (pypi, source)

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

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

Ответ 2

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

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

Ответ 3

Здесь один адаптирован из решения utdemir и это решение, которое будет работать с Python 2.6, "formatter является новым в 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

Ответ 4

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

Вам может показаться полезным: http://www.diveintopython3.net/regular-expressions.html#phonenumbers

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

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