私が持っているすべてが10桁以上の文字列である場合、これを電話番号としてどのようにフォーマットできますか?
いくつかの簡単な例:
555-5555
555-555-5555
1-800-555-5555
それらをフォーマットする唯一の方法はそれらではないことを知っています。自分でそれを行う場合、私は物事を省く可能性が非常に高いです。 pythonライブラリまたは電話番号をフォーマットする標準的な方法はありますか?
最後を除いて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'
「-」フォーマッタがPython 2.7で新しく追加されたため、Python 2.6で動作する tdemir's solution と this 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つの数字の後にハイフンを挿入し、文字列の先頭に到達するまで3つのグループを実行することです。組み込みの機能などは知りません。
あなたはこれが役立つかもしれません: http://www.diveintopython3.net/regular-expressions.html#phonenumbers
正規表現は、電話番号のユーザー入力を受け入れる場合に役立ちます。上記のリンクでたどった正確なアプローチは使用しません。数字を取り除くだけのような簡単な方法は、おそらく簡単で同じくらい良いでしょう。
また、数値にコンマを挿入することは、他の場所で効率的に解決された類似の問題であり、この問題に適応できます。