Ci-dessous, les différences entre deux révisions de la page.
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 chiffre. Cette 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 variable, nous 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 |