Extraire nombre décimaux d'un chaîne pour versioning

Bonjour,

Je fait un programme qui met à jour les versions d'un fichier. Mon programme actuel ne prend pas en compte les nombres à virgules. Autrement dit, si mon fichier se nomme Excel-Pratique23 Il va le renommer en Excel-Pratique_v23. Je voudrais ajouter à ça une virgule tel que mon programme renomme en Excel-Pratique_v2.3

Morceau de mon programme actuel :

Function RenameFile(chemin As String)
  Dim RegEx As VBScript_RegExp_55.RegExp
  Dim Matches As VBScript_RegExp_55.MatchCollection
  Dim Match As VBScript_RegExp_55.Match
  Dim Result As String
  Dim Filename As String
  Dim Repertoire As String

  Filename = Right(chemin, InStr(1, StrReverse(chemin), "\") - 1)         ' Récupère le nom du fichier dans repertoire grâce à la fonction strreverse qui trouve la position du \ avant le nom du fichier
  Repertoire = Replace(chemin, Filename, "")                              ' Filename = nom avec et sans chemin

  Set RegEx = New VBScript_RegExp_55.RegExp
  Filename = Replace(Filename, "-v", "_v")                                ' On remplace les - par _ dans le Filename
  RegEx.Pattern = "^(.+)(_V[0-9]+)\.(.+)$"                                ' Teste si le nom est formalisé
  If Not RegEx.Test(Filename) Then                                        ' Si il n'est pas formalisé :
    RegEx.Pattern = "^([^0-9|\.|_]+)_*([0-9]*)\.(.+)$"                    ' Découpe le nom pour récupérer les parties à réassembler en excluant le underscore
    Set Matches = RegEx.Execute(Filename)                                 ' Vérifie si le nom correspond avec me formalisme
    If (Matches(0).SubMatches(1)) = "" Then                               ' Si ça match ;
      Result = Repertoire & RegEx.Replace(Filename, "$1_v0.1.$3")         ' réassemble avec les morceaux trouvés et v0.1 car pas de numérotation
    Else                                                                  ' Si ça match pas ;
      Result = Repertoire & RegEx.Replace(Filename, "$1_v$2.$3")          ' Réassemble les morceaux en insérant le _v
    End If
    Name chemin As Result                                                 ' Nommer le nouveau chemin
  End If

End Function

J'ai tenté quelques modifications mais je ne maîtrise pas très bien le pattern. Si quelqu'un peut m'aider s'il vous plaît !

RegEx.Pattern = "^(.+)(_V[0-9]{1,2}(.)[0-9]+)\.(.+)$"                                               
If Not RegEx.Test(Filename) Then                                                                    
RegEx.Pattern = "^([^[0-9]{1,2}(.)[0-9]|\.|_]+)_*([0-9]{1,2}(.)[0-9]*)\.(.+)$" 


Bonjour,

Outre les soucis de compatibilité possibles, l'objet regex est assez lourd et son utilisation tend parfois à complexifier la résolution de problèmes pas si compliqués.

Il faut donc essayer de l'utiliser à bon escient...

Pouvez-vous donner tous les cas de figure possibles et le résultat à obtenir à chaque fois ? Par exemple, avec EP123, doit-on obtenir EP1.2.3, EP12.3 ou EP1.23 ?

Par ailleurs, je ne comprends pas cette ligne :

Result = Repertoire & RegEx.Replace(Filename, "$1_v0.1.$3")

A quoi correspondent les $1 et $3 et le 0.1. ? Ce sont les matches et sous-matches ?

Cdlt,

Rechercher des sujets similaires à "extraire nombre decimaux chaine versioning"