Je reviens à la charge avec les Regex. Je travailles sur un interpréteur de formules, à chaque réduction d'une partie des équations, on enlève les parenthèses en trop, exemple:
Elle fonctionne bien sauf à la fin avec ce type de chaîne:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 Dim rgx_const_parenthesee As New Regex("((\()([0-9,]+)+(\)))") ' regex pour trouver des nombres décimaux entre aprenthèses (avec groupage des parenthèses et du nombre) For Each match As Match In rgx_const_parenthesee.Matches(res) 'on enlève les parenthèses inutiles autours de certaines opérations résolues qui bloquent le porcessus : ex (((1+2)))+1 donnerait (3)+1. Le programme pense qu'il y a une sous opération à gauche du plus et ne fait pas 3+1. Dim s As String = match.Value s = s.Replace("(", "") s = s.Replace(")", "") res = res.Replace(match.Value, s) 'pour l'exemple (((1+2)))+1 on a (3)+1, la regex trouve (3) et met cette string dans s, on enlève les parenthèses, et on remplace (3) par 3 Next
Le matching ne rend plus la main, ça tourne sans fin à priori sans même entrer dans la boucle. Je ne vois pas trop pourquoi.(0,0045492502083257919268042437+1,0882259561075000389088239696)
Pour information, à ce stade là, la regex ne doit plus trouver de parenthèse à enlever avant le calcul final.
pour votre aide
[Edit]
A l'avant-dernier tour la regex matche bien cette chaîne:
mais c'est la dernière fois qu'elle tourne correctement((0,0045492502083257919268042437)+(1,0882259561075000389088239696))
Partager