Python regex numéros de téléphone
gab74m
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
voilà j'ai un fichier excel comportant par exemple des numéros de téléphone.
Plusieurs utilisateurs ont alimentés ce fichier du coup il y a des problème de format avec les numéros de téléphone. Certains ont mis des espaces, des virgules, des points...
Au final une recherche simple le fichier excel devient problématique.
Puis utiliser du langage python ?
Voici ma regex : ([0]{1})([1-9]{1})[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}
Est-il possible de reformater tout dans le format que je souhaite ou sinon de faire une recherche en prenant en compte les différences qu'il peut y avoir...
Je ne connais pas trop le langage python...
Merci pour votre réponse
voilà j'ai un fichier excel comportant par exemple des numéros de téléphone.
Plusieurs utilisateurs ont alimentés ce fichier du coup il y a des problème de format avec les numéros de téléphone. Certains ont mis des espaces, des virgules, des points...
Au final une recherche simple le fichier excel devient problématique.
Puis utiliser du langage python ?
Voici ma regex : ([0]{1})([1-9]{1})[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}[ .,/-]?[1-9]{2}
Est-il possible de reformater tout dans le format que je souhaite ou sinon de faire une recherche en prenant en compte les différences qu'il peut y avoir...
Je ne connais pas trop le langage python...
Merci pour votre réponse
A voir également:
- Regex numero telephone
- Téléphone - Guide
- Voici ce que signifie l'icône N sur votre téléphone - et pourquoi vous devriez l'activer - Guide
- Méfiez-vous si ce petit point de couleur s'allume dans un coin de l'écran de votre téléphone - Accueil - Protection
- Se connecter à gmail sur téléphone - Guide
- Regle telephone - Guide
2 réponses
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
Tu peux donc faire cela en VBA sous Excel.
En supposant que tes numéros soient dans une colonne, comme ceci :

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 :

Le résultat sur ce test donne au final :

Dal
En supposant que tes numéros soient dans une colonne, comme ceci :

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 :

Le résultat sur ce test donne au final :

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