如果我所拥有的是一个10位或更多位的字符串,我该如何将其格式化为电话号码?
一些微不足道的例子:
555-5555
555-555-5555
1-800-555-5555
我知道这些不是格式化它们的唯一方法,如果我自己做的话,我很可能会把事情搞清楚。是否有python库或格式化电话号码的标准方法?
答案 0 :(得分:37)
答案 1 :(得分: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'
答案 2 :(得分:4)
这是一个改编自utdemir's solution和this solution的版本,可以使用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
答案 3 :(得分:1)
您可以使用库 clean_phone()
中的函数 DataPrep。使用 pip install dataprep
安装。
>>> from dataprep.clean import clean_phone
>>> df = pd.DataFrame({'phone': ['5555555', '5555555555', '18005555555']})
>>> clean_phone(df, 'phone')
Phone Number Cleaning Report:
3 values cleaned (100.0%)
Result contains 3 (100.0%) values in the correct format and 0 null values (0.0%)
phone phone_clean
0 5555555 555-5555
1 5555555555 555-555-5555
2 18005555555 1-800-555-5555
答案 4 :(得分:0)
一个简单的解决方案可能是从后面开始并在四个数字后插入连字符,然后执行三个组,直到到达字符串的开头。我不知道内置函数或类似的东西。
您可能会发现这有用: http://www.diveintopython3.net/regular-expressions.html#phonenumbers
如果您接受用户输入的电话号码,正则表达式将非常有用。我不会使用上面链接所遵循的确切方法。更简单的东西,比如剥离数字,可能更容易,同样好。
此外,将逗号插入数字是一个类似的问题,已在其他地方有效解决,可以适应这个问题。