[R] Regex téléphone

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

[R] Regex téléphone

#1

Message par scorp84 »

Bonjour à tous,

Tout d'abord bon courage à tous pour le confinement.

Voici mon besoin du jour : Je récupère des commentaires dans lesquels, j'ai besoin d'extraire des numéros de téléphone.

Exemple de commentaires :
PDS 07h 06 12 45 78 48
Agent sur place 06.12.45.78.48
APP 07h20 06/12/45/78/48
Appeler l'agent au 0612457848
0612457848 pour agent sur place

J'ai utilisé le pattern suivant pour isoler les chiffres :
$pattern = "[0-9]"
$reg_exp_res = StringRegExp($comm_en_cours, $pattern, 3)
$reg_exp_res=_ArrayToString($reg_exp_res, "")
ConsoleWrite($reg_exp_res & @CRLF)

qui fonctionne pour les commentaires 2, 4 et 5 car il n'y a pas d'autres chiffres mais pas pour le 1 et 3 ou il y a une heure.

Le numéro peut-être n'importe où.

Merci d'avance pour votre aide.

Amicalement.

BM
Modifié en dernier par scorp84 le jeu. 19 mars 2020 16:55, modifié 1 fois.
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [..] Regex téléphone

#2

Message par walkson »

Bonjour,
J'ai bricolé ce regex il y a surement plus simple !
On obtient un array dans un array qui lui contient le N° de téléphone. C'est pas génial mais ça marche :mrgreen: .
J'ai compliqué la recherche en ajoutant des indicatifs, plusieurs N° et plusieurs lignes à tout hasard...
Local $array[7] = ["1-PDS 07h 06 12 45 78 48","2-Agent sur place 06.12.45.78.48 ou 07.12.45.78.48" & @CRLF & "ou 08.12.45.78.48","3-APP 07h20 06/12/45/78/48","4-Appeler l'agent au 0612457848","5-07-12-45-78-48 pour agent sur place", _
"6-Agent (+33) 01 85 73 14 00 à 07:15","7-Agent (+596) 06 78 56 56 00 à 07h15 le 12/04/2020"]

For $i = 0 To UBound($array) - 1
   $reg_exp_res = StringRegExp($array[$i], "(?m)(0|[+0-9])[1-9]([-. /]?[0-9]{2}){4}+", 4)
 For $y = 0 To UBound($reg_exp_res) - 1
   Local $aMatch = $reg_exp_res[$y]
   MsgBox(0,$y & " /"& UBound($reg_exp_res) - 1 &" pour "& $i  , $array[$i] & @CRLF & @CRLF & "N°: " &  $aMatch[0])
 Next
Next
Jchd ou Michel auront surement de meilleurs idées
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
scorp84
Niveau 7
Niveau 7
Messages : 400
Enregistré le : mar. 04 nov. 2008 21:51
Localisation : Avignon, France
Status : Hors ligne

Re: [..] Regex téléphone

#3

Message par scorp84 »

Bonjour Walkson,

Une fois de plus un grand merci pour votre réponse rapide et efficace (comme d'hab :-)

Amicalement.

BM
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [R] Regex téléphone

#4

Message par walkson »

Doucement avec les compliments ! je ne suis pas sûr de les mériter :oops:
Testez avec "1-PDS 07h15 06 12 45 78 48" cela vous retourne 15 06 12 45 78 ce qui n'est pas la réponse attendue !
Y'a encore du travail sur la planche :P
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [R] Regex téléphone

#5

Message par mikell »

My 2 cents - out of containment :mrgreen:

$txt1 = "PDS 07h 06 12 45 78 41" & @crlf & _
   "Agent sur place 06.12.45.78.42" & @crlf & _
   "APP 07h20 06/12/45/78/43" & @crlf & _
   "Appeler l'agent au 0612457844" & @crlf & _
   "0612457845 pour agent sur place" & @crlf & _
   "1-PDS 07h06 06 12 45 78 46" & @crlf & _
   "1-PDS 07h 06 06 12 45 78 47"

$txt2 = "1-PDS 07h 06 12 45 78 41" & @crlf & _
   "2-Agent sur place 06.12.45.78.48 ou 07.12.45.78.42" & @crlf & _
   "ou 08.12.45.78.43" & @crlf & _
   "3-APP 07h20 06/12/45/78/44" & @crlf & _
   "4-Appeler l'agent au 0612457845" & @crlf & _
   "5-07-12-45-78-46 pour agent sur place" & @crlf & _
   "6-Agent (+33) 01 85 73 14 00 à 07:15" & @crlf & _
   "7-Agent (+596) 06 78 56 56 00 à 07h15 le 12/04/2020"

$res = StringRegExpReplace($txt2, _
   '(?m)^.*(?<!h)(\d{2})([-. /]?)((?1))\2((?1))\2((?1))\2((?1)).*', _
   "$1 $3 $4 $5 $6")
Msgbox(0,"", $res)
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: [R] Regex téléphone

#6

Message par walkson »

Bonjour,
J'aime bien ce code car il formate les N° et il est simple mais sur le $txt2 à "2-Agent sur place 06.12.45.78.48 ou 07.12.45.78.42" & @crlf & _ il ne prend que le deuxième numéro.
Sinon j'ai trouvé ce regex que j'ai bidouillé et qui accepte à peu près toutes les formes de N° mais il ne les formate pas
Local $array[9] = ["1-PDS 07h15 06 12 45 78 48","2-Agent sur place 06.12.45.78.48 ou 07.12.45.78.48" & @CRLF & "ou 08.12.45.78.48","3-APP 07h20 06/12/45/78/48","4-Appeler l'agent au 0612457848","5-07-12-45-78-48 pour agent sur place", _
"6-Agent +33 1 85 73 14 00 à 07:15","7-Agent (+33) 06 78 56 56 00 à 07h15 le 12/04/2020","8-Agent 0033 1 78 56 56 00 à 07h15 le 12/04/2020","9 +33 678 565 600" ]

For $i = 0 To UBound($array) - 1
   $reg_exp_res = StringRegExp($array[$i], "(?m)(?:(?:\+|00)33|0)\s*[1-9](?:[\s\W]*\d{2,3}){3,4}", 4)
 For $y = 0 To UBound($reg_exp_res) - 1
   Local $aMatch = $reg_exp_res[$y]
   MsgBox(0,$y & " /"& UBound($reg_exp_res) - 1 &" pour "& $i  , $array[$i] & @CRLF & @CRLF & "N°: " &  $aMatch[0])
 Next
Next
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Répondre