Page 1 sur 1

RegEx pour traiter messsages « SEPA »

Publié : 09 mai 2018, 17:11
par jaladuvar
Ma banque me communique les prélèvements ou les virements SEPA dans le nom de la transaction qui se présente sous une forme du type
PRELEVEMENT EUROPEEN 3430661916 POUR CPTE DE:CASTOSOF ID: FR86114495878 MOTIF: PRELEVEMENT SEPA 51482375200
Quand tous les messages sont « conformes » la regex suivante me permet d’isoler
Le payeur ou le débiteur, (suit DE:)
L’identité du payeur/débiteur (suit ID:)
Le message (suit MOTIF:). Des fois il y une partie REF:
.*\s*(?: DE:(.*))(?: ID:(.*))(?: MOTIF:(.*))
Malheureusement les différentes parties. DE: ID: MOTIF: ne sont pas toujours présentes et dans ce cas là, la regex ne fonctionne pas.
J’ai essayé de rendre (par exemple) DE: optionnel en changeant par
.*\s*(?: DE:(.*)){0,1}(?: ID:(.*))(?: MOTIF:(.*))
mais cela ne marche pas.


Merci par avance pour une piste....

Re: RegEx pour traiter messsages « SEPA »

Publié : 09 mai 2018, 19:32
par Angeman
Essayez ça :

Code : Tout sélectionner

.*(?: DE:(.*))?(?: ID:(.*))?(?: MOTIF:(.*))?

Re: RegEx pour traiter messsages « SEPA »

Publié : 10 mai 2018, 09:55
par jaladuvar
Cela ne marche pas (voir copie d'écran de regex01)

lien vers regex de test

https://regex101.com/r/Nqo755/2

Image

Je joins quelques lignes de test

Code : Tout sélectionner

PRELEVEMENT EUROPEEN 3001474924 DE: ONEY BANQUE ACCORD-ONEY BANK ID: FR56CLT157791 MOTIF: GC=01820034594*GC=01820034594 
VIR RECU    9192770469S DE: Humanis  Retraite Agirc MOTIF: RETRAITE COMPLEMENTAIRE AGIRC HUMAN IS  RETRAITE AGIRC REF : 0000000000 
VIR RECU    9196804737S DE: Humanis Retraite Arrco MOTIF: RETRAITE COMPLEMENTAIRE ARRCO HUMAN IS RETRAITE ARRCO REF : 00000000000 
VIR RECU    9086457436S DE: CNP Assurances 83 MOTIF: 12 00268863 REF: 12/00268863 
VIR RECU    0485970259S DE: CPAM VAR MOTIF: 180930001235180930001235 REF: 180930001235 
PRELEVEMENT EUROPEEN 0309538286 DE: CANALSAT - Groupe CANAL PLUS ID: FR90ZZZ397351 MOTIF: PRLV CANAL Abonnement mensuel 
PRELEVEMENT EUROPEEN 0309538295 DE: Canal Plus ID: FR16ZZZ185574 MOTIF: PRLV CANAL+ Abonnement mensuel 
PRELEVEMENT EUROPEEN 0401871507 DE: TELERAMA ID: FR31ZZZ203637 MOTIF: TELERAMA    E0000238302 050117 
PRELEVEMENT EUROPEEN 0427145415 POUR CPTE DE:CASTOSOF ID: FR86114495878 MOTIF: PRELEVEMENT SEPA 51482375200 
PRELEVEMENT EUROPEEN 0517974281 DE: Free Telecom ID: FR83ZZZ459654 MOTIF: Free HautDebit 695074410 
PRELEVEMENT EUROPEEN 0425022541 DE: CFCA DEPANNAGE EXPRESS ID: FR05ZZZ516833 MOTIF: 0117 06468198 21304663 54558258 DEP 
RELEVEMENT EUROPEEN 2001427553 DE: MUTUELLE DE L'INDUSTRIE DU PETROLE ID: FR69MIP108863 MOTIF: Prelevement 42CXK 024 de MIP du 01/
PRELEVEMENT EUROPEEN 7603288450 DE: CECA NICE MATIN ID: FR13ZZZ664129 REF: 00000005290000004152A0591910001 
PRELEVEMENT MATMUT ROUEN
PRELEVEMENT EUROPEEN 1703960579 DE: Bip Go ID: FR98ZZZ607600 MOTIF: Bip Go/.FB0020850087-1-BIPANDGO/ADV 
VIR RECU    1883093782S DE: CPAM VAR MOTIF: 181070001617181070001617 REF: 181070001617 
PRELEVEMENT EUROPEEN 8013447058 DE: FREE MOBILE ID: FR07ZZZ591778 REF: fmpmt-565330921 
PRELEVEMENT EUROPEEN 7603288450 DE: CECA NICE MATIN ID: FR13ZZZ664129 REF: 00000005290000004152A0591910001 
VIR RECU    2385619854S DE: MUTUELLE DE L'INDUSTRIE DU PETROLE MOTIF: 6OWUB 000 - remboursement Sante MIP 
PRELEVEMENT EUROPEEN 5405318101 DE: Le Point ID: FR08PNT106372 MOTIF: PRELEVEMENT 
PRELEVEMENT EUROPEEN 8200558875 DE: Engie ID: FR03SYM002381 MOTIF: Mandat                       ++S004 
VIR RECU    9085103990S DE: XXXX RETRAITES SAS MOTIF: 12 00272274 REF: 314552400 
PRELEVEMENT EUROPEEN 2708139463 DE: URSSAF RHONE ALPES-CNCESU ID: FR55ZZZ143065 MOTIF: PRELEVEMENT CNCESU
VIR RECU    3089705203S DE: CPAM VAR MOTIF: 181170001119181170001119 REF: 181170001119 

Re: RegEx pour traiter messsages « SEPA »

Publié : 10 mai 2018, 10:46
par Angeman
C'est dans iCompta qu'il faut tester parce que sur votre site ce n'est pas le même "format" d'expressions régulières et donc il peut y avoir des nuances.

Re: RegEx pour traiter messsages « SEPA »

Publié : 11 mai 2018, 10:18
par jaladuvar
Même dans iCompta cela ne fonctionnait pas, apparemment la syntaxe (...)? retournait toute la chaine suivante sans tenir compte des mots insérés (type MOTIF: etc..)
La seule regex que j'ai trouvée et testée dans plusieurs environnements: BBedit, le site regex101 et iCompta est la suivante

Code : Tout sélectionner

.* DE:(.*)(?:(?: ID: (.*))(?: MOTIF: (.*)))|(?:.* DE:(.*)(?: MOTIF: (.*))(?: REF\s{0,1}: (.*)))|(?:.* DE:(.*)(?: MOTIF: (.*)))|(?:.* DE:(.*)(?: REF: (.*)))|(?:.* DE:(.*)(?: ID: (.*))(?: REF: (.*)))
Elle est un peu complexe à exploiter car par exemple la récupération de l'émetteur (ce qui suit DE:) se fait par

$1$4$7$9$11

Ce serait plus pratique si la syntaxe ? fonctionnait