Regex extraction d'un libellé importé
Regex extraction d'un libellé importé
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 ?
Détail du cas 1 où les valeurs de montant "parasites" sont bien identifiées
ps: j'utilise pour tester l'outil disponible sur https://regex101.com/
question: iCompta utilise quoi pour les regex ? PCRE, javascript, python ?
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 ?
Détail du cas 1 où les valeurs de montant "parasites" sont bien identifiées
ps: j'utilise pour tester l'outil disponible sur https://regex101.com/
question: iCompta utilise quoi pour les regex ? PCRE, javascript, python ?
jaladuvar
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
- Angeman
- Administrateur
- Messages : 12518
- Inscription : 28 décembre 2008, 21:28
- Localisation : Toulouse, France
- Contact :
Re: Regex extraction d'un libellé importé
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![Clin d’œil ;-)](./images/smilies/icon_e_wink.gif)
C'est la théorie, je n'ai pas testé pour vérifier
![Clin d’œil ;-)](./images/smilies/icon_e_wink.gif)
ICU : http://userguide.icu-project.org/strings/regexp
Re: Regex extraction d'un libellé importé
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...
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...
jaladuvar
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
- Angeman
- Administrateur
- Messages : 12518
- Inscription : 28 décembre 2008, 21:28
- Localisation : Toulouse, France
- Contact :
Re: Regex extraction d'un libellé importé
Au pire vous pouvez faire 2 regex différentes, une avec montant et la suivante sans montant.
Re: Regex extraction d'un libellé importé
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
mais dans iCompta
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}|(.*))
jaladuvar
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
- Angeman
- Administrateur
- Messages : 12518
- Inscription : 28 décembre 2008, 21:28
- Localisation : Toulouse, France
- Contact :
Re: Regex extraction d'un libellé importé
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 ?
Re: Regex extraction d'un libellé importé
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}}
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}}
jaladuvar
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
- Angeman
- Administrateur
- Messages : 12518
- Inscription : 28 décembre 2008, 21:28
- Localisation : Toulouse, France
- Contact :
Re: Regex extraction d'un libellé importé
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
Ce qui nous donne $1 pour le type, $4 pour le destinataire et $2/$3 pour la date.
![Clin d’œil ;-)](./images/smilies/icon_e_wink.gif)
Code : Tout sélectionner
^([A-Z,0-9, ]*\d )?(?:(\d\d)(\d\d)/)?([a-z,A-Z,0-9, ,\-,',_,\.,\/ ,\*]*?)( [\-\+]?\d+,\d\d)?$
Re: Regex extraction d'un libellé importé
Merci ! Toujours un support 1ère classe !
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
![Très heureux :D](./images/smilies/icon_e_biggrin.gif)
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
jaladuvar
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
MacBook Pro (13-inch, 2018, Four Thunderbolt 3 Ports) 2,7 GHz - Intel Core i7 - 16 Go
Sonoma 14.0
- Angeman
- Administrateur
- Messages : 12518
- Inscription : 28 décembre 2008, 21:28
- Localisation : Toulouse, France
- Contact :
Re: Regex extraction d'un libellé importé
Voilà le lien à jour : https://regex101.com/r/ZXU6RK/18