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édentes Révision précédente
Prochaine révision
Révision précédente
cold:tutoriaux:regex [2015/11/04 16:20]
florian [Recherche multi-ligne]
cold:tutoriaux:regex [2023/03/17 09:56] (Version actuelle)
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]|\n)*(?​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]|\n)*%% | 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: 2023/03/17 09:56 (modification externe)