Какой лучший способ отформатировать номер телефона в Python? - PullRequest
20 голосов
/ 14 августа 2011

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

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

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

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

Ответы [ 4 ]

37 голосов
/ 14 августа 2011

для библиотеки: телефонные номера ( pypi , source )

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

Файл readme недостаточен, но я нашел код хорошо задокументированным.

23 голосов
/ 14 августа 2011

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

>>> 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'
4 голосов
/ 17 октября 2014

Вот одно из адаптированных решений Утдемира и этого решения , которое будет работать с 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"\1-", "%d" % int(clean_phone_number[:-1])) + clean_phone_number[-1]
    return formatted_phone_number
0 голосов
/ 14 августа 2011

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

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

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

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

...