2011-08-14 79 views
18

如果我擁有的是10位或更多位的字符串,如何將其格式化爲電話號碼?在Python中格式化電話號碼的最佳方式是什麼?

一些簡單的例子:

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

我知道這些都不是格式化他們的唯一途徑,它很可能我會離開的事情,如果我做我自己。有沒有python庫或格式化電話號碼的標準方式?

+5

他們可能來自哪個範圍?不同的國家對格式化電話號碼有不同的約定。 –

+4

借調。請不要編寫假設每個電話號碼均爲美國格式的代碼。嘗試使用這樣的程序真的讓人惱火。 – snap

+1

看起來寫電話號碼的標準方式叫做E.123。所以一個國家號碼看起來像是(800)555 5555',國際號碼看起來像是'+1 800 555 5555'。但不要忘記,不同國家的長短不一。 http://en.wikipedia.org/wiki/E.123 –

回答

32

圖書館:PHONENUMBERS(pypisource

Python版本的Google公共庫,用於解析,格式化,存儲和驗證國際電話號碼。

自述文件不足,但是我發現代碼是有據可查的。

+15

對於那些尋找快速答案的人來說,這裏是一個帶美國數字的樣本。 'pip install phonenumbers' then'''import phonenumbers phonenumbers.format_number(phonenumbers.parse(「8006397663」,'US'),phonenumbers.PhoneNumberFormat.NATIONAL)''' –

+1

如何在這個庫中使用自定義格式?我需要{CountryCode} - \ d {3} - {remaining_numbers} – Crusader

+0

github上的自述文件非常棒。 https://github.com/daviddrysdale/python-phonenumbers – Ryan

0

一個簡單的解決方案可能是從後面開始,在四個數字後面插入連字符,然後做三個組,直到達到字符串的開頭。我不知道內置函數或類似的東西。

你可能會有所幫助:如果您在接受電話號碼的用戶輸入 http://www.diveintopython3.net/regular-expressions.html#phonenumbers

正則表達式將是有益的。我不會在上面的鏈接中使用確切的方法。簡單一些,比如簡單地刪除數字,可能更容易,同樣好。

此外,將逗號插入數字是一個類似的問題,已經在其他地方有效解決,並可以適應這個問題。

+0

鏈接書已死 –

+0

我修正了鏈接。 – ChrisP

19

好像與除了最後三位數組格式化你的例子,你可以寫一個簡單的函數,使用千個分隔符,並增加了最後一個數字:

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

這裏的一個改編自utdemir's solutionthis 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