Bonjour,

J'ai un script python chargé de traiter des fichiers et récupérer différentes données, via des regex configurable.
Je tente dans la mesure du possible de récupérer les données avec un nombre de regex minimum.
Mais là je coince car je dois utiliser des capture nommée avec des formats différents.
En php, à priori une option permet de le faire, pas en python et je ne trouve pas d'alternative.
Au pire je fait deux passes, en utilisant deux regex, mais pas optimum ;-).

Plus concrètement (avec données fictives)...

Exemples de data à traiter :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
Dans un fichier....
12:00 ROUTEUR01 Démarrage : version 1.2 test 03
12:01 ROUTEUR01 Test version 1.2
 
 
Dans un autre fichier...
12:00 ROUTEUR02 Démarrage
15:01 ROUTEUR02 Test version 1.3
Pour chaque routeur, je dois récupérer la version et le numéro de test si présent. Le script va écraser les infos des routeurs à chaque nouvelle entrée qui corresponds (pour précision avec des captures nommées est indispensable pour des raisons de souplesse non illustrée ici).
Idéalement via une seule regex. Ici, je devrais avoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
ROUTEUR01;1.2;03
ROUTEUR02;1.3
Ma regex précédente ne sortait pas les nouvelles version 1.3 : pas de problème, j'ai modifié comme cela...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
.*(?P<Routeur>ROUTEUR\d{2}).*version\sv*(?P<Valeur>\d{1,2}.\d{2})(?:.*test.*(?P<Valeur2>\d{2}))*
Et là, j'ai découvert que la ligne indiquant la version 1.3 existait aussi avant! C'est le drame, mon script n'indique plus les valeurs test des 1.2 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
ROUTEUR01;1.2
ROUTEUR02;1.3
Facile, la solution logique serait de faire soit l'un soit l'autre, en une seule regex....
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
.*(?P<Routeur>ROUTEUR\d{2}).*version\s(?:v(?P<Valeur>\d{1,2}.\d{2}).*test.*(?P<Valeur2>\d{2})|(?P<Valeur>1.30))
En PHP, avec l'option /J ça marche. En Python... quoi, il n'y a pas cette option????

... et depuis je pleure en remaniant dans tous les sens ;-) ...

Alors, oui, je pourrais modifier le code autour de la regex mais ce n'est pas le but et c'est démesuré.
Oui, je peux faire deux regex. Mon script saura le traiter... en analysant chaque ligne deux fois au lieu d'une, et ça me chiffonne!

Alors, existe-t-il une solution? Une option cachée (pas trouvée...)? Une formulation différente de ma regex (j'avoue, je ne maitrise pas certaines méthodes)?
Ou c'est mort en Python...

Merci pour vos lumières et votre temps .