Bonjour tout le monde,
Des sequences sont definies par des chaines de caracteres : 'abc1-3,7,10-14x2@@ext' est la definition textuelle de
Ces chaines sont de la forme [prefix][numeros][padding][suffix]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 abc01ext abc02ext abc03ext abc07ext abc10ext abc12ext abc14ext
Le nombre d'arobase definit le padding des index. Les x2, x3... le pas entre chaque index.
J'utilise l'expression reguliere suivante pour separer mes chaines en 4 parties :
J'utilise a cet effet la function split du module re de python.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 r'''(?P<indices>(?:(?:-?[\d]+--?[\d]+(?:x\d+)?|-?[\d]+),?)*) (?P<padding>(?(indices)@*|@+))'''
Ca fonctionne bien avec de chaines comme :
Cependant si ma chaine devient compliquee, ca marche beaucoup moins bien :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 3 3@@ @@ -10--6 -10--6x2 -10--6x2@@ -10--6x2,-4,-1-1@@ p.-10--6x2,-4,-1-1@@ p.-10--6x2,-4,-1-1@@.s
Dans ce cas la, le premier "2" est matche par le group (?<indices>), alors que c'est le dernier -10--6x2,-4,-1-1@@ qui devrait etre matche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2'/tmp files/foo2_v2,x2.0001.2-10#.-2.3-11@@._-10--6x2,-4,-1-1@@_bar-10--6x2,-4,-1-1@@.tar.bz'
J'essais d'eviter au maximum la manipulation des chaines de caracteres en dehors du traitement effectue par les expressions regulieres.
Donc :
- comment s'assurer que mon expression reguliere va matcher la derniere occurence ?
- peut specifier une expression reguliere qui me permettrait de matcher directement le prefix et le suffixe sans passer par la function split ? Quelque chose comme :
Bien evidement l'exemple ne fonctionne pas, le groupe (?P<prefix>.*) retourne une chaine vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 (?P<prefix>.*?) (?P<indices>(?:(?:-?[\d]+--?[\d]+(?:x\d+)?|-?[\d]+),?)*) (?P<padding>(?(indices)@*|@+) (?P<suffix>.*)
Merci beaucoup pour votre aide !
Partager