如果我擁有的是10位或更多位的字符串,如何將其格式化爲電話號碼?在Python中格式化電話號碼的最佳方式是什麼?
一些簡單的例子:
555-5555
555-555-5555
1-800-555-5555
我知道這些都不是格式化他們的唯一途徑,它很可能我會離開的事情,如果我做我自己。有沒有python庫或格式化電話號碼的標準方式?
如果我擁有的是10位或更多位的字符串,如何將其格式化爲電話號碼?在Python中格式化電話號碼的最佳方式是什麼?
一些簡單的例子:
555-5555
555-555-5555
1-800-555-5555
我知道這些都不是格式化他們的唯一途徑,它很可能我會離開的事情,如果我做我自己。有沒有python庫或格式化電話號碼的標準方式?
對於那些尋找快速答案的人來說,這裏是一個帶美國數字的樣本。 'pip install phonenumbers' then'''import phonenumbers phonenumbers.format_number(phonenumbers.parse(「8006397663」,'US'),phonenumbers.PhoneNumberFormat.NATIONAL)''' –
如何在這個庫中使用自定義格式?我需要{CountryCode} - \ d {3} - {remaining_numbers} – Crusader
github上的自述文件非常棒。 https://github.com/daviddrysdale/python-phonenumbers – Ryan
一個簡單的解決方案可能是從後面開始,在四個數字後面插入連字符,然後做三個組,直到達到字符串的開頭。我不知道內置函數或類似的東西。
你可能會有所幫助:如果您在接受電話號碼的用戶輸入 http://www.diveintopython3.net/regular-expressions.html#phonenumbers
正則表達式將是有益的。我不會在上面的鏈接中使用確切的方法。簡單一些,比如簡單地刪除數字,可能更容易,同樣好。
此外,將逗號插入數字是一個類似的問題,已經在其他地方有效解決,並可以適應這個問題。
鏈接書已死 –
我修正了鏈接。 – ChrisP
好像與除了最後三位數組格式化你的例子,你可以寫一個簡單的函數,使用千個分隔符,並增加了最後一個數字:
>>> 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's solution和this solution,它們將與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
他們可能來自哪個範圍?不同的國家對格式化電話號碼有不同的約定。 –
借調。請不要編寫假設每個電話號碼均爲美國格式的代碼。嘗試使用這樣的程序真的讓人惱火。 – snap
看起來寫電話號碼的標準方式叫做E.123。所以一個國家號碼看起來像是(800)555 5555',國際號碼看起來像是'+1 800 555 5555'。但不要忘記,不同國家的長短不一。 http://en.wikipedia.org/wiki/E.123 –