Python regex numéros de téléphone
Fermé
gab74m
Messages postés
4
Date d'inscription
vendredi 11 octobre 2019
Statut
Membre
Dernière intervention
11 octobre 2019
-
11 oct. 2019 à 10:46
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 11 oct. 2019 à 15:11
[Dal] Messages postés 6203 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 29 janvier 2025 - 11 oct. 2019 à 15:11
A voir également:
- Regex numéro de téléphone 10 chiffres
- Téléphone - Guide
- Schéma téléphone oublié - Guide
- Numero prive - Guide
- Regle telephone - Guide
- Clé de produit windows 10 gratuit - Guide
2 réponses
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
Modifié le 11 oct. 2019 à 11:31
Modifié le 11 oct. 2019 à 11:31
Salut gab74m,
Ta regexp
me paraît trop restrictive : elle suppose un numéro à 10 chiffres (quid des numéros courts ou des numéros étrangers), qui commence obligatoirement par 0, elle ne matche pas les numéros où il y a un zéro ailleurs que dans le premier chiffre, elle ne matche pas s'il y a un séparateur ailleurs qu'entre des groupes de 2 chiffres, elle ne matche pas s'il y a deux caractères séparateurs et non un seul,...
Je pense que tu te compliques la vie et que ce que tu devrais faire c'est simplement prendre chaque numéro et retirer tous les caractères qui ne sont pas des chiffres de 0 à 9.
Ensuite, mettre ton propre format, si cela a un sens.
Tu n'as pas besoin des regexp pour cela n'y d'apprendre un nouveau langage et le VBA de ton Excel suffit.
Pour les numéros internationaux, il peuvent être précédés d'un + et du préfixe international du pays, je ne pense pas que tu devrais retirer le plus. Les utilisateurs sont aussi susceptibles d'entrer des numéros internationaux en les précédant de 00 (qui, en France, est équivalent au +). Si tu traites des numéros internationaux, il faudra aussi être prudent dans leur traitement, car il comportent parfois des chiffres à ne pas composer, qui sont mis entre parenthèses (ils ne sont utiles que dans les appels internes au pays, comme le premier 0 dans les numéros français selon le plan de numérotation actuel). Bref, pour ces numéros, à moins que tu saches très exactement ce que tu fais, tu devrais probablement t'abstenir de les modifier.
Dal
Ta regexp
"([0]{1})([1-9]{1})[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}"
me paraît trop restrictive : elle suppose un numéro à 10 chiffres (quid des numéros courts ou des numéros étrangers), qui commence obligatoirement par 0, elle ne matche pas les numéros où il y a un zéro ailleurs que dans le premier chiffre, elle ne matche pas s'il y a un séparateur ailleurs qu'entre des groupes de 2 chiffres, elle ne matche pas s'il y a deux caractères séparateurs et non un seul,...
Je pense que tu te compliques la vie et que ce que tu devrais faire c'est simplement prendre chaque numéro et retirer tous les caractères qui ne sont pas des chiffres de 0 à 9.
Ensuite, mettre ton propre format, si cela a un sens.
Tu n'as pas besoin des regexp pour cela n'y d'apprendre un nouveau langage et le VBA de ton Excel suffit.
Pour les numéros internationaux, il peuvent être précédés d'un + et du préfixe international du pays, je ne pense pas que tu devrais retirer le plus. Les utilisateurs sont aussi susceptibles d'entrer des numéros internationaux en les précédant de 00 (qui, en France, est équivalent au +). Si tu traites des numéros internationaux, il faudra aussi être prudent dans leur traitement, car il comportent parfois des chiffres à ne pas composer, qui sont mis entre parenthèses (ils ne sont utiles que dans les appels internes au pays, comme le premier 0 dans les numéros français selon le plan de numérotation actuel). Bref, pour ces numéros, à moins que tu saches très exactement ce que tu fais, tu devrais probablement t'abstenir de les modifier.
Dal
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
Modifié le 11 oct. 2019 à 12:45
Modifié le 11 oct. 2019 à 12:45
Tu peux donc faire cela en VBA sous Excel.
En supposant que tes numéros soient dans une colonne, comme ceci :
![](https://img-19.ccm2.net/mtEHXDGmroMVonCcZF8E316yZ6Y=/323x/0e725919c44143c4b7daf6ac7ac44fef/ccm-ugc/apture_decran_du_2019-10-11_12-38-30.png)
Tu peux créer une macro VBA comme ceci :
La macro va parcourir les cellules de la plage indiquée et retirer tous caractères autres que des chiffres, et ne rien faire si elle pense avoir affaire à un numéro international, avec un message comme ceci :
![](https://img-19.ccm2.net/fU0rhI5AQ3b297oC7b9Gy7ZoN5U=/283x/d6dd3d36bad04692a403bd6e91662b11/ccm-ugc/apture_decran_du_2019-10-11_12-39-39.png)
Le résultat sur ce test donne au final :
![](https://img-19.ccm2.net/fYU0WCTVBAhBKB-Xcppn27xgTbs=/328x/c20a617186c648cc901353994694a590/ccm-ugc/apture_decran_du_2019-10-11_12-40-06.png)
Dal
En supposant que tes numéros soient dans une colonne, comme ceci :
![](https://img-19.ccm2.net/mtEHXDGmroMVonCcZF8E316yZ6Y=/323x/0e725919c44143c4b7daf6ac7ac44fef/ccm-ugc/apture_decran_du_2019-10-11_12-38-30.png)
Tu peux créer une macro VBA comme ceci :
Sub Ccm36253824() Dim cellRange As Range Set cellRange = Range("C5:C9") ' adapter ' Parcourir les lignes For i = 1 To cellRange.Count Dim st As String Dim stmod As String Dim c ' Récupérer la valeur st = cellRange.cells(i, 1).Value stmod = "" ' Si ce n'est pas un numéro international If Mid(st, 1, 2) <> "00" And Mid(st, 1, 1) <> "+" Then For j = 1 To Len(st) ' Parcourir les caractères et ne garder que ce qui ' représente des chiffres c = Mid(st, j, 1) If c >= "0" And c <= "9" Then stmod = stmod & c End If Next ' Stocker cela sous forme de texte cellRange.cells(i, 1).Value = stmod cellRange.cells(i, 1).NumberFormat = "@" Else ' Si c'est un numéro international, on le signale MsgBox "En " + CStr(i) + " : " + st + " est un numéro international, on ne fait rien" End If Next End Sub
La macro va parcourir les cellules de la plage indiquée et retirer tous caractères autres que des chiffres, et ne rien faire si elle pense avoir affaire à un numéro international, avec un message comme ceci :
![](https://img-19.ccm2.net/fU0rhI5AQ3b297oC7b9Gy7ZoN5U=/283x/d6dd3d36bad04692a403bd6e91662b11/ccm-ugc/apture_decran_du_2019-10-11_12-39-39.png)
Le résultat sur ce test donne au final :
![](https://img-19.ccm2.net/fYU0WCTVBAhBKB-Xcppn27xgTbs=/328x/c20a617186c648cc901353994694a590/ccm-ugc/apture_decran_du_2019-10-11_12-40-06.png)
Dal
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
11 oct. 2019 à 14:36
11 oct. 2019 à 14:36
Hmm, il y a une erreur, le zéro initial est supprimé car le texte est interprété comme un chiffre en ligne 26. Il faut juste inverser les lignes 26 et 27 pour d'abord fixer le format de la cellule et ensuite mettre le numéro de téléphone dedans.
[Dal]
Messages postés
6203
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
29 janvier 2025
1 099
11 oct. 2019 à 15:11
11 oct. 2019 à 15:11
travaille sur des copies de ton fichier !
11 oct. 2019 à 11:31
As-tu un exemple de scrypt VBA qui me permettrai du coup de retirer tout ce qui est "-.,*/".
Je ne connais pas trop le VBA et il me faut une solution automatique par rapport au nombre de données...
Modifié le 11 oct. 2019 à 11:37
11 oct. 2019 à 11:38