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:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
^.*(KB[0-9]+)[-_]?(V[0-9]+)?.*$
J'en extrait les groupes suivants :
Et donc j'obtiens le résultat suivant:
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
^(IE[0-9]+)?([-_])?.*(KB[0-9]+)[-_]?(V[0-9]+)?.*([-_])?(IE[0-9]+)?.*$
Remplacé par :
Résultat (à partir de WindowsServer2003-KB2722913-x86-ENU_IE8.exe):
KB2722913

Alors que je souhaiterai obtenir le résultat suivant:
KB2722913_IE8

D'avance merci à ceux qui m'aideront à trouver LA solution :-)