Extraction d'infos par expression régulière

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Extraction d'infos par expression régulière

#1

Message par Tlem »

Bonsoir tout le monde. Petite demande aux experts de la RegEx. ^^

Je souhaite extraire des données sur un chaîne qui contient des zones fixes et des zones variables.
La chaine (complète) peux être de la forme :
"-PC:\Chemin Fichiers\ -NLE-KING JUNIOR Pierre Jean-Marc 03.12.1970 N°Dossier XYZ:1"
Les parties en rouge étant variables.

Voici les patterns que j'utilise pour extraire les informations recherchées :
  • Pour le chemin des fichiers : "-P(.*) -N"
  • Pour le nom : "-N(.*?) [[:upper:]]{1}[[:lower:]]{1}"
  • Pour le/les prénoms : "-N.*? ([[:upper:]]{1}[[:lower:]]{1}.*) \d{2}.\d{2}.\d{4} .*Dossier"
  • Pour la date de naissance j'utilise : " \d{2}.\d{2}.\d{4} "
  • Pour le numéro de dossier j'utilise : "Dossier .*:(\d+)"

Les éléments et contraintes de ma demande :
le nom : Il est obligatoirement en majuscule. Par contre il peut être composé ou contenir plusieurs éléments (comme dans l'exemple).
Pour cette extraction, je me suis basé sur le premier élément fixe "-N" puis sur la première partie du prénom (Une majuscule + une minuscule), mais si le prénom est vide, patatras cela ne fonctionne plus.
Du coup, je souhaiterais faire en sorte que si le prénom est vide, on se base sur la date de naissance et si celle-ci n'existe pas non plus on utilise la dernière balise fixe qui est "N°Dossier :".
Pour résumer, je souhaite :

Code : Tout sélectionner

-PC:\Chemin Fichiers\ -NLE-KING JUNIOR Pierre Jean-Marc 31.07.1967 N°Dossier XYZ:1	=> "LE-KING JUNIOR"
-PC:\Chemin Fichiers\ -NLE-KING JUNIOR 31.07.1967 N°Dossier XYZ:1			=> "LE-KING JUNIOR"
-PC:\Chemin Fichiers\ -NLE-KING JUNIOR Pierre Jean-Marc N°Dossier XYZ:1			=> "LE-KING JUNIOR"
-PC:\Chemin Fichiers\ -NLE-KING JUNIOR N°Dossier XYZ:1					=> "LE-KING JUNIOR"
Le/les prénoms : Il est obligatoirement composé de mot(s) dont la première lettre est majuscule et le reste en minuscule.
Pour cette extraction, c'est plus ou moins la même chose que pour le nom, sauf qu'il n'y a que la partie date de naissance à gérer, puisqu'il y aura obligatoirement le nom !
Pour résumer, je souhaite :

Code : Tout sélectionner

-PC:\Chemin Fichiers\ -NLE-KING JUNIOR Pierre Jean-Marc 31.07.1967 N°Dossier XYZ:1	=> "Pierre Jean-Marc"
-PC:\Chemin Fichiers\ -NLE-KING JUNIOR Pierre Jean-Marc N°Dossier XYZ:1			=> "Pierre Jean-Marc"
Pour la date de naissance et le numéro de dossier, aucun problème particulier. ^^
Je ne souhaite pas particulièrement réaliser l'extraction de toutes les données en une seule fois, car cette extraction n'est pas réalisée de manière rapprochée, donc pas la peine de vous creuser la tête pour une quelconque optimisation. ^^

Merci d'avance à la personne qui pourra m'aider. :bisou:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

Re: Extraction d'infos par expression régulière

#2

Message par orax »

Code : Tout sélectionner

(*UCP)-P(.*) -N([\p{Lu}- ]+)(?=[\p{Lu} ]) ([\p{L}- ]*?) ?(\d{2}\.\d{2}\.\d{4})? ?N°Dossier (.+)
https://regex101.com/r/5OeUXN/4
D'après les exemples, ça m'a l'air de marcher.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: Extraction d'infos par expression régulière

#3

Message par Tlem »

Merci Orax.

J'ai modifié par :

Code : Tout sélectionner

(*UCP)-P(.*) -N([\p{Lu}- ]+)(?=[\p{Lu} ]) ([\p{L}- ]*?) ?(\d{2}\.\d{2}\.\d{4})? ?N°Dossier .*:(.+)
pour que le groupe 5 ne contienne que le numéro de dossier. ^^
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre