[RegEx] Extraire des parties du nom d'un fichier KB
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:
^.*(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:
^(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 :-)