在Python中格式化电话号码的最佳方法是什么?

Joe*_*Joe 22 python format formatting standards libs

如果我只有一个10位或更多位的字符串,我该如何将其格式化为电话号码?

一些微不足道的例子:

555-5555
555-555-5555
1-800-555-5555
Run Code Online (Sandbox Code Playgroud)

我知道这些并不是格式化它们的唯一方法,如果我自己做的话,我很可能会把事情搞清楚.是否有python库或格式化电话号码的标准方法?

kus*_*sut 38

用于图书馆:phonenumbers(pypi,source)

用于解析,格式化,存储和验证国际电话号码的Google公共库的Python版本.

自述文件不足,但我发现代码记录良好.

  • 对于那些寻找快速答案的人,这里有一个美国编号​​的样本.`pip install phonenumbers`然后```import phonenumbers phonenumbers.format_number(phonenumbers.parse("8006397663",'US'),phonenumbers.PhoneNumberFormat.NATIONAL)``` (20认同)
  • @ShaneReustle:你的评论和答案一样好 **`8^D`** (3认同)
  • 如何在此库中使用自定义格式?我需要{CountryCode}-\ d {3}-{remaining_numbers} (2认同)

utd*_*mir 23

看起来像您的示例格式化为三位数组除了最后一个,您可以编写一个简单的函数,使用千位分隔符并添加最后一位数:

>>> 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'
Run Code Online (Sandbox Code Playgroud)


Jon*_*abe 5

这是一个改编自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"\1-", "%d" % int(clean_phone_number[:-1])) + clean_phone_number[-1]
    return formatted_phone_number
Run Code Online (Sandbox Code Playgroud)