web-dev-qa-db-ja.com

Pythonで電話番号をフォーマットする最良の方法は何ですか?

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

いくつかの簡単な例:

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

それらをフォーマットする唯一の方法はそれらではないことを知っています。自分でそれを行う場合、私は物事を省く可能性が非常に高いです。 pythonライブラリまたは電話番号をフォーマットする標準的な方法はありますか?

25
Joe

ライブラリの場合:電話番号( pypisource

国際電話番号を解析、フォーマット、保存、検証するためのGoogleの共通ライブラリのPythonバージョン。

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

41
kusut

最後を除いて3桁のグループでフォーマットされた例のようですが、単純な関数を記述でき、1000の区切り記号を使用して最後の桁を追加します。

>>> 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'
24
utdemir

「-」フォーマッタがPython 2.7で新しく追加されたため、Python 2.6で動作する tdemir'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
4
Jon Mabe

簡単な解決策は、後ろから始めて4つの数字の後にハイフンを挿入し、文字列の先頭に到達するまで3つのグループを実行することです。組み込みの機能などは知りません。

あなたはこれが役立つかもしれません: http://www.diveintopython3.net/regular-expressions.html#phonenumbers

正規表現は、電話番号のユーザー入力を受け入れる場合に役立ちます。上記のリンクでたどった正確なアプローチは使用しません。数字を取り除くだけのような簡単な方法は、おそらく簡単で同じくらい良いでしょう。

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

0
ChrisP