Outils pour utilisateurs

Outils du site


cold:tutoriaux:regex

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
cold:tutoriaux:regex [2015/11/04 16:20] – [Recherche multi-ligne] floriancold:tutoriaux:regex [2025/09/15 15:11] (Version actuelle) – [Recherche multi-ligne] florian
Ligne 6: Ligne 6:
 ====== Capture ====== ====== Capture ======
  
-Les parenthèses ( ) de groupement permettent de délimiter un ensemble d'alternatives et d'opérer des captures.+Les parenthèses **( )** de groupement permettent de délimiter un ensemble d'alternatives et d'opérer des captures.
 Le plus souvent si nous réalisons une capture nous voudrons pouvoir y faire référence via un nom que nous aurons choisi. Le plus souvent si nous réalisons une capture nous voudrons pouvoir y faire référence via un nom que nous aurons choisi.
  
Ligne 12: Ligne 12:
   (?P<nom_du_groupe_de_capture>...)   (?P<nom_du_groupe_de_capture>...)
  
-La sous-expression régulière (ici symbolisée par ...  ) qui aura été trouvée sera accessible par le nom **//nom_du_groupe_de_capture//**+La sous-expression rationnelle(ici symbolisée par ...  ) qui aura été trouvée sera accessible par le nom **//nom_du_groupe_de_capture//**
  
-Dès lors nous pouvons y faire référence dans la suite de l'expression régulière elle-même : +Dès lors nous pouvons y faire référence dans la suite de l'expression rationnelle elle-même : 
-  (?P=nom_du_groupe_de_capture)\\+  (?P=nom_du_groupe_de_capture) 
 + 
 +Mais dans le cas de EzGED nous y ferons le plus souvent référence lors d'un post formatage grâce à la syntaxe [[cold:reference:groupname|@<groupname>]].\\
  
-Mais le plus souvent nous voudront surtout y faire référence lors d'un post formatage.\\ 
 Tout de suite un petit exemple.  Tout de suite un petit exemple. 
  
Ligne 43: Ligne 44:
   @keepdigits(@self)   @keepdigits(@self)
      
-Ce qui pourrait fonctionner si nous spécifions correctement la longueur du champ.+Mais dans notre exemple ci-dessus si la longueur du champ ou les paramétrage de positionnement sont trop laxistes nous avons le risque de récupérer aussi la référence client.
  
-Soit le filtre de champ suivant +Nous pouvons procéder autrement en capturant explicitement le premier numéro de la ligne: 
-  Numero de facture : (?P<numero>\d+)+  Numero de facture : (?P<numero>\d+)\D*
  
-Pour ne garder que le numero on fera ceci dans le champ post de formatage :+Le premier numéro est la première suite de chiffres non interrompue. Elle prend fin dès lors que l'on rencontre autre chose qu'un chiffre (comme un espace ou une lettre).
  
-  @caststr(@<numero>)+{{wiki:icons:info.png}} \D est équivalent à la séquence [^0-9]. Elle identifie tout caractère sauf un chiffre.
      
 ===== Recherche multi-ligne ===== ===== Recherche multi-ligne =====
  
 Prenons cet exemple de texte extrait  Prenons cet exemple de texte extrait 
-<file> 
-Tricatel 
-120, Avenue Foch 
-94000 
-Créteil 
  
 +{{:cold:tutoriaux:capture_multiligne.png|}}
  
 +Si l'on souhaite récupérer le numéro de facture on pourrait le faire assez simplement en utilisant la macro @relativeto.
 +Ce serait une bonne solution mais il existe une alternative qui ne nous obligera pas à créer deux champs d'analyse.
  
 +Comme le montre la capture nous utilisons un champ de type variable et nous ciblons à l'aide des paramètres de position la zone de recherche. La zone de recherche est encadrée en rouge (l'image est tronquée, elle s'étend jusqu'au bas du document).
  
-                        Facture N°                Date de la facture                                                     Adresse Client +Et l'expression rationnelle que nous utilisons est la suivante 
-                                                     04/11/2015 +  Facture N.[^\d]*(?P<num>\d+)
-                           681476 +
-                                                                                                                         Gastro Discount +
-Numéro de client                      456                                                                                La Défense +
-Paiement d0                           04/12/2015                                                                         75000 Paris +
-Modalité de paiement                  30 jours                                                                           France +
-Emis par                              Jacques Tricatel +
-Contact client                        Noël Grobouchon +
-Date de la vente/prestation           20/10/2015 +
-Adresse de livraison                 Gastro Discount Lyon, ZAC De la Malbouf 69100 VILLEURBANNE +
-Date de livraison                    Du 05/11/2015 au 10/11/2015+
  
-</file>+Décomposons l'expression.
  
-Si l'on souhaite récupérer le numéro de facture on pourrait le faire assez simplement en utilisant la macro @relativeto+^ Expression ^ Signification ^ 
-Ce serait une bonne solution mais il existe une alternative qui ne nous obligera pas à créer deux champs d'analyse.+| Facture N. | Ce que l'on recherche commence par cette chaîne. Le point remplace le signe ° qui n'est pas bien géré| 
 +| %%[^\d]*%% | Ce qui suit doit être un caractère (excluant les chiffres) ou un retour à la ligne. Ce motif peut se répéter 0 ou plusieurs fois | 
 +| (?P<num>\d+) | On doit trouver au moins un chiffreCette suite de chiffre est capturée dans la variable num |
  
-Sur un modèle d'analyse un peu touffu voilà quelque chose que l'on aimerait éviter ! 
  
-Nous allons créer un seul champ de type variablenous allons restreindre la zone de recherche via les positions X/Y.+**En résumé :** Nous cherchons une chaîne qui **commence par** //**"Facture N"**//qui est suivit **éventuellement** (mais pas nécessairement) par **tout type de caractère sauf les chiffres** mais en **incluant les sauts de ligne** et cet enchaînement est suivi par **au moins un chiffre**.
  
 +L'exemple dans la capture ci-dessus nous renvoi comme valeur
 +  681476
cold/tutoriaux/regex.1446654003.txt.gz · Dernière modification : (modification externe)