Regex extraction d'un libellé importé

Discussions sur la création de règles dans iCompta et notamment l'élaboration d'expressions régulières
Répondre
jaladuvar
Messages : 63
Enregistré le : 19 février 2011, 08:35

Regex extraction d'un libellé importé

Message par jaladuvar » 26 novembre 2017, 16:02

Autre sujet:
Je récupère certaines opérations depuis les affichages dans mes divers comptes sur internet, certains n'ayant pas le statut de relevés pouvant être traités directement par iCompta.
Je récupère les informations dans un fichier csv que j'importe, mais le libellé(=nom pour icompta) est à la fois encombré et riche d'éléments que je souhaite soit éliminer, soit re-distribuer sur d'autres champs. Je bute actuellement sur la regex (ou les regex) qui me permettraient de traiter cette question.
En particulierJe souhaite rationaliser les noms, en en éliminant tout ce qui est variable, afin de pouvoir catégoriser les écritures correspondantes.En effet iCompta ne reconnaît les catégories que si les noms sont absolument identiques.

Je joins deux copies d'écran d'une "même" regex (la différence est entourée de rouge).
Dans le premier cas, seules les écritures comportant un montant "informatif" ( parfois le montant est répété dans le libellé ou est donné dans la monnaie de la transaction s'il s'agit d'opérations à l'étranger) sont traitées et de façon satisfaisante.
Dans le deuxième cas toutes les écritures sont traitées mais les montants ne sont pas exclus, donc les noms ne sont pas uniformisés.

Quelle devrait être ma regex ?
Regex_1.png
Regex_1.png (51.05 Kio) Vu 106 fois
Regex_2.png
Regex_2.png (60.33 Kio) Vu 106 fois
Détail du cas 1 où les valeurs de montant "parasites" sont bien identifiées
Regex_2_bis.png
Regex_2_bis.png (37.09 Kio) Vu 106 fois
ps: j'utilise pour tester l'outil disponible sur https://regex101.com/

question: iCompta utilise quoi pour les regex ? PCRE, javascript, python ?

Avatar du membre
Angeman
Administrateur
Messages : 9375
Enregistré le : 28 décembre 2008, 21:28
Localisation : Toulouse, France
Contact :

Re: Regex extraction d'un libellé importé

Message par Angeman » 26 novembre 2017, 17:29

Le problème c'est que lorsque vous mettez * (qui veut dire au passage présent 0 ou n fois, donc il serait plus logique de mettre ? pour dire 0 ou 1 fois), le caractère - se retrouve matché par votre groupe précédent. Donc il faut indiquer au groupe précédent qu'on veut le matcher le minimum de fois possibles afin de laisser une chance aux 2 groupes suivants de matcher. Pour ça il faut mettre *? au lieu de juste * pour le 2ème * en partant de la fin.

C'est la théorie, je n'ai pas testé pour vérifier ;-)
jaladuvar a écrit :
26 novembre 2017, 16:02
question: iCompta utilise quoi pour les regex ? PCRE, javascript, python ?
ICU : http://userguide.icu-project.org/strings/regexp

jaladuvar
Messages : 63
Enregistré le : 19 février 2011, 08:35

Re: Regex extraction d'un libellé importé

Message par jaladuvar » 27 novembre 2017, 08:36

J'ai essayé, mais cela ne marche pas, je continue à chercher... mais suis reconnaissant d'avance à toute suggestion.
Si on rend optionnel la fin par des * ou *? on capte bien la partie libellé partout mais en totalité (y compris le montant sous la forme nnn,nn)
Si on rend cette partie "obligatoire" on isole bien le montant et l'autre partie du libellé mais seulement quand ce montant est présent.

À suivre...

Avatar du membre
Angeman
Administrateur
Messages : 9375
Enregistré le : 28 décembre 2008, 21:28
Localisation : Toulouse, France
Contact :

Re: Regex extraction d'un libellé importé

Message par Angeman » 27 novembre 2017, 09:10

Au pire vous pouvez faire 2 regex différentes, une avec montant et la suivante sans montant.

jaladuvar
Messages : 63
Enregistré le : 19 février 2011, 08:35

Re: Regex extraction d'un libellé importé

Message par jaladuvar » 27 novembre 2017, 23:07

Je pense y être arrivé, mais quand je mets cette regex dans la règle, s'il y a des captures vides cela semble parfois polluer le résultat.
Elles sont remplacées par la dernière capture faite dans cette opération ?
A-t'on le moyen d'y remédier ?
Comme l'illustration est petite je mets la regex ici

Code : Tout sélectionner

([A-Z,0-9, ]*\d ){0,1}(?:(\d\d)(\d\d)\/){0,1}([a-z,A-Z,0-9, ,\-,',_,\.,\/ ,]*)(?<= )(?:(?:(\-|\+)(\d*,\d\d)){0,1}|(.*))
regexOK.png
regexOK.png (143.39 Kio) Vu 75 fois
mais dans iCompta
appliRegex.png
appliRegex.png (74.59 Kio) Vu 73 fois

Avatar du membre
Angeman
Administrateur
Messages : 9375
Enregistré le : 28 décembre 2008, 21:28
Localisation : Toulouse, France
Contact :

Re: Regex extraction d'un libellé importé

Message par Angeman » 28 novembre 2017, 21:30

Pouvez-vous poster un fichier d'exemple avec juste 2 ou 3 opérations et votre règle que je regarde ça de plus près ?

jaladuvar
Messages : 63
Enregistré le : 19 février 2011, 08:35

Re: Regex extraction d'un libellé importé

Message par jaladuvar » 30 novembre 2017, 13:19

Bonjour, désolé mais cela m'a pris un peu de temps car j'étais occupé.

Voici le lien vers la regex essayée où tout est ok

https://regex101.com/r/ZXU6RK/17

Voici le lien vers le fichier de test avec les mêmes écritures.

https://www.dropbox.com/s/zkmqnxl10j27k ... t.cdb?dl=1

Au fait dommage qu'on ne puisse pas créer une variable MAregex contenant la regex et l'utiliser comme argument de "remplacer l'expression régulière" {{MAregex}}

Avatar du membre
Angeman
Administrateur
Messages : 9375
Enregistré le : 28 décembre 2008, 21:28
Localisation : Toulouse, France
Contact :

Re: Regex extraction d'un libellé importé

Message par Angeman » 30 novembre 2017, 18:03

Bon alors ce qu'il manque surtout c'est ^ au début et $ à la fin de la regex pour dire que ça doit matcher le champ en entier. J'ai aussi modifié légèrement votre regex pour la simplifier mais vous êtes libre de conserver celle que vous voulez ;-)

Code : Tout sélectionner

^([A-Z,0-9, ]*\d )?(?:(\d\d)(\d\d)/)?([a-z,A-Z,0-9, ,\-,',_,\.,\/ ,\*]*?)( [\-\+]?\d+,\d\d)?$
Ce qui nous donne $1 pour le type, $4 pour le destinataire et $2/$3 pour la date.

jaladuvar
Messages : 63
Enregistré le : 19 février 2011, 08:35

Re: Regex extraction d'un libellé importé

Message par jaladuvar » 30 novembre 2017, 19:58

Merci ! Toujours un support 1ère classe ! :D

Cela marche bien et va m'être très utile, surtout pour la catégorisation "automatique".

Dans l'outil https://regex101.com/r/ZXU6RK/17 il faut que je choisisse le mode "Python" pour que cela fonctionne.
Je vais utiliser cela dans l'avenir

Avatar du membre
Angeman
Administrateur
Messages : 9375
Enregistré le : 28 décembre 2008, 21:28
Localisation : Toulouse, France
Contact :

Re: Regex extraction d'un libellé importé

Message par Angeman » 30 novembre 2017, 20:11

Voilà le lien à jour : https://regex101.com/r/ZXU6RK/18

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité