Bonjour à vous,
J'utilise une RegEx pour récupérer des parties dans une chaine de caractères, des valeurs numériques.
J'ai des suites de nombres, avec des séparateurs du type :
Cas extrême :
0.08(0.07Az)/ 0.005(0.004Az) -1.25 (0.556oO) / -1.06 (0.483oO) 22.05,89.051(0.060,0.642Pkl)/21.063,87.933(0.059,0.638Pkl)
Cas Simple :
0.08
Sachant que je peux avoir n'importe quelle combinaison comprise entre ces deux cas.
Je voudrais savoir s'il est possible de répéter une partie du motif tout enpermettant l'utilisation de .Groups() une fois le match effectué.
J'utilise ceci comme motif :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
'Définition du masque
Dim pattern As String = ( *\-?\(?([\d\.]+)[a-zA-Z]*\,?\/?\(?\)?\-?){1,}
'Définition de la MatchCollection pour la RegEx
Dim retourPrincipal As MatchCollection
'Utilisation de la RegEx sur la MatchCollection via le masque
retourPrincipal = Regex.Matches(fichierComplet, pattern)
'Pour le contrôle des valeurs dans les différents Match de .Groups
For Each m As Match In retourPrincipal
MsgBox(m.Groups(0).Value & vbNewLine & m.Groups(1).Value & vbNewLine & m.Groups(2).Value & _
vbNewLine & m.Groups(3).Value & vbNewLine & m.Groups(4).Value & vbNewLine & m.Groups(5).Value & _
vbNewLine & m.Groups(6).Value & vbNewLine & m.Groups(7).Value & vbNewLine & m.Groups(8).Value)
next |
J'utilise des parenthèses pour récupérer tout de suite les valeurs numériques dans le pattern :
1 2 3 4
| ([\d\.]+)
'via
m.Groups(0).Value
'me retourne sans traitement "0.638" |
Le soucis est que lorsque je demande le Groups(0).value il me retourne la dernière valeur numérique de la chaine, et les autres sont vide. Alors que je souhaite qu'il augmente lui même le nombre de groupement en fonction du type de ce que la RegEx trouve.
Sinon je devrais mettre 16 fois se code bout à bout pour utiliser le .Groups
Dim pattern As String = ( *\-?\(?([\d\.]+)[a-zA-Z]*\,?\/?\(?\)?\-?)( *\-?\(?([\d\.]+)[a-zA-Z]*\,?\/?\(?\)?\-?)?( *\-?\(?([\d\.]+)[a-zA-Z]*\,?\/?\(?\)?\-?)? '... Ainsi de suite 16 fois au total ...
Je pense qu'il y a un meilleur moyen d'y parvenir, et je ne dois pas regarder dans le bon sens, c'est pour ça que je vous demande conseils, afin (si c'est réalisable) de faire un motif récursif qui ne récupère dans ses .Groups les valeurs numériques.
Cordialement,
Nicolas
Partager