Bonjour,
Je demande de l'aide aux cadors des expressions régulières car j'ai pas mal cherché une réponse avant de venir demander de l'aide ici mais je cherche à faire quelque chose d'un peu tricky (à mes yeux) avec une expression régulière mais mon résultat n'est que très partiel... et cela ne me conviens pas vraiment ;-)
J'ai un fichier avec un nom dont je veux extraire plusieurs groupes exemple:
WindowsServer2003-KB2722913-x86-ENU.exe
A l'aide de l'expression régulière suivante:
J'en extrait les groupes suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^.*(KB[0-9]+)[-_]?(V[0-9]+)?.*$
Et donc j'obtiens le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part $2$1
KB2722913
Note: vous remarquerez que je récupère aussi les versions du KB (_v2, -v2, etc)
Bien, cela fonctionne très bien mais ce n'est pas tout, je veux aussi extraire du nom du fichier les groupes qui contiennent "IE6", "IE7", "IE8", etc pour obtenir par exemple à partir de ces fichiers différents :
IE8_WindowsServer2003-KB2722913-x86-ENU.exe
WindowsServer2003-IE8_KB2722913-x86-ENU.exe
WindowsServer2003-KB2722913-x86-ENU_IE8.exe
Le résultat invariable suivant :
KB2722913_IE8
Et c'est la que les problèmes commencent car lorsque je rajoute les groupes (IE[0-9]+)? et ([_-])? dans mon expression régulière, ceux-ci ne sont pas trouvés dans le résultat :-(
Apparemment, les .* dans l'expression régulière étant la source du problème.
J'ai cherché du côté des lookahead/lookbehind et autre lookaround (http://www.regular-expressions.info/lookaround.html) mais je ne maîtrise pas ces aspects et je n'ai pas trouvé la bonne expression moi tout seul...
Mon expression régulière (à cet instant) qui récupère IE[0-9]+[-_] au début de la chaine, mais pas ailleurs :
Remplacé par :
Code : Sélectionner tout - Visualiser dans une fenêtre à part ^(IE[0-9]+)?([-_])?.*(KB[0-9]+)[-_]?(V[0-9]+)?.*([-_])?(IE[0-9]+)?.*$
Résultat (à partir de WindowsServer2003-KB2722913-x86-ENU_IE8.exe):
Code : Sélectionner tout - Visualiser dans une fenêtre à part $3$4$2$1$5$6
KB2722913
Alors que je souhaiterai obtenir le résultat suivant:
KB2722913_IE8
D'avance merci à ceux qui m'aideront à trouver LA solution :-)
Partager