Si tout ce que j'ai est une chaîne de 10 chiffres ou plus, comment puis-je la formater comme un numéro de téléphone?
Quelques exemples triviaux:
555-5555
555-555-5555
1-800-555-5555
Je sais que ce ne sont pas les seuls moyens de les formater, et il est très probable que je laisserai les choses de côté si je le fais moi-même Existe-t-il une bibliothèque Python ou un moyen standard de formater les numéros de téléphone?
On dirait que vos exemples sont formatés avec des groupes de trois chiffres sauf le dernier. Vous pouvez écrire une fonction simple, utiliser des milliers de séparateurs et ajouter le dernier chiffre:
>>> 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'
En voici une adaptée de la solution utdemir et cette solution qui fonctionnera avec Python 2.6, car le formatage "," est une nouveauté de 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
Une solution simple pourrait être de commencer à l’arrière et d’insérer le trait d’union après quatre chiffres, puis de créer des groupes de trois jusqu’au début de la chaîne. Je ne suis pas au courant d'une fonction intégrée ou de quelque chose comme ça.
Vous pourriez trouver cela utile: http://www.diveintopython3.net/regular-expressions.html#phonenumbers
Les expressions régulières seront utiles si vous acceptez la saisie de numéros de téléphone par l'utilisateur. Je n'utiliserais pas l'approche exacte suivie sur le lien ci-dessus. Quelque chose de plus simple, comme taper des chiffres, est probablement plus facile et tout aussi bien.
De plus, l'insertion de virgules dans les nombres est un problème analogue qui a été résolu efficacement ailleurs et qui pourrait être adapté à ce problème.