2011-08-14 25 views
18

私が持っているものがすべて10桁以上の文字列である場合、これを電話番号としてどのようにフォーマットできますか?Pythonで電話番号をフォーマットする最も良い方法は何ですか?

いくつかの些細な例:私はそれらを知っている

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

は、それらをフォーマットするための唯一の方法ではありません、それは私が自分自身をそれを行う場合、私は物事を残しておきます非常に可能性があります。 Pythonライブラリや標準的な電話番号の書式設定方法はありますか?

+5

どの範囲から来る可能性がありますか?電話番号の書式設定方法が国によって異なる。 –

+4

Seconded。すべての電話番号が米国の形式であることを前提としたコードを記述しないでください。そのようなプログラムで作業しようとするのは本当に刺激的です。 – snap

+1

電話番号を書くための標準的な方法はE.123と呼ばれます。国番号は '(800)555 5555'のようになり、国際番号は' +1 800 555 5555'のようになります。しかし、異なるグループの長さは国によって異なることを忘れないでください。 http://en.wikipedia.org/wiki/E.123 –

答えて

32

を:の電話番号(pypisource

国際電話番号の解析、書式設定、保存、検証用のPython版Google共通ライブラリです。

readmeは不十分ですが、コードが十分に文書化されています。

+15

クイックアンサーをお探しの方は、ここに米国番号のサンプルがあります。 ( "8006397663"、 'US')、phonenumbers.PhoneNumberFormat.NATIONAL) '' ' –

+1

このライブラリでカスタムフォーマットを使用するにはどうすればいいですか?私は{CountryCode}が必要です - \ d {3} - {remaining_numbers} – Crusader

+0

githubのreadmeは素晴らしいです。 https://github.com/daviddrysdale/python-phonenumbers – Ryan

0

単純な解決策は、先頭から4桁の数字の後にハイフンを挿入し、文字列の先頭に達するまで3つのグループを作成することです。私は組み込みの関数などを認識していません。

あなたは、これが役に立つかもしれません:あなたは電話番号のユーザー入力を受け入れている場合 http://www.diveintopython3.net/regular-expressions.html#phonenumbers

正規表現は有用であろう。私は上記のリンクに従った正確なアプローチを使用しません。数字を取り除くのと同じように、もっと簡単なことはおそらくもっと簡単で、それと同じです。

また、カンマを数字に挿入することは、他の場所で効率的に解決された類似の問題であり、この問題に適応できます。

+0

本へのリンクがありません –

+0

私はリンクを修正しました。 – ChrisP

19

最後を除いて3桁のグループでフォーマットあなたの例のように、あなたは簡単な関数を書くことができ、千の区切り文字を使用し、最後の桁追加されますようだ:ライブラリの

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

"、"フォーマッタはPython 2.7で新しくなったので、ここではutdemir's solutionthis solutionに適合しています。

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 
関連する問題