J'ai une expression arithmétique simple contenant des entiers, des parenthèses et + - */. Comme ceci:C# expression arithmétique fractionnée en chaîne []
((1+33)()(4+(3-5)))
Ce que je dois faire est de diviser cette expression à la string[]
comme ceci:
{(, (, 1, +, 33,), (,), (, 4, +, (, 3, -, 5,),),)}
Je suis en train de le faire avec Regex
classe
public string[] SplitString(string str)
{
return Regex.Split(str, "(?<=[()-+*/])|(?=[()-+*/])");
}
Mais les données de sortie ne sont pas tout à fait exactes:
{(, (, 1, +, 33,), (,), (, 4, +, (, **3-5**,),),)}
Vous pouvez calculer le résultat sans le diviser. Est-ce ce que vous êtes après? – user3185569
Notez que ') - +' créer une plage dans votre classe de char qui correspond plus que vous pourriez vous attendre. Placez le trait d'union à la fin de la classe de caractères. –
En plus de ce tableau de bord non échappé, je suggère d'envisager de faire autrement: faire correspondre les jetons désirés et retourner une liste de tous les résultats - vous obtiendrez une expression rationnelle plus simple: 'return Regex.Matches (str, @" ([() + */-] | \ d +) "). Cast() .Sélectionnez (m => m.Value) .ToArray();' –