
J'ai actuellement une fonction qui fait plusieurs lignes que j'aimerais simplifier en utilisant une ou plusieurs expressions régulières.
La finalité de cette fonction est de donner la masse molaire d'une molécule en ne connaissant que sa formule (par exemple Hf(SO4)2)et les masse molaires des élements la constituants.
Les élément commençant par une majuscule, et les parenthèses permettent de donner un indice à un ensemble d’éléments.
Ce qui me pose problème c'est de séparer chaque élément et de les lier avec leur indice respectif.
Parfois il n'y a pas d'indice après les parenthèses : cela correspond à un indice 1.
Idéalement j'obiens un tableau à deux dimensions : l'élement et son indice.
Par exemple pour Hf(SO4)2 ===> myArray = { [HF,1],[S,2],[O,8] }
Les - ou -2 (- ou + avec un chiffre après, ou pas) à la fin représente la charge, et ne sont pas à traiter. Dans ma fonction je fais un substring des le début pour le virrer afin de ne plus m'encombrer avec.
Voici quelques formules pour l'exemple :
Hg(SeCn)4-2 => Hg(SeCn)4 si on virre la charge dès le départ.
Hg(SeCn)3- => Hg(SeCn)3 si on virre la charge dès le départ.
Am(H2PO4)+2 => Am(H2PO4) si on virre la charge dès le départ.
Le mieux que j'obtiens c'est : myRegex = New Regex("[(\)d+]") qui ne me permet pas de propager l'indice aux élements entre parentheses.
Je suis un peu nul avec les expressions régulières, et je ne sais pas trop comment placer les crochets et parenthèses pour obtenir des tableaux utilisables...

Est ce que quelqu'un a une idée ?
Est-il possible d'obtenir un tableaux à deux dimensions avec un regex.split() ?
Merci d'avance
