Ich habe einen einfachen arithmetischen Ausdruck mit ganzen Zahlen, Klammern und + - */. Wie folgt aus:C# split arithmetischer Ausdruck zu string []
((1+33)()(4+(3-5)))
Was ich tun müssen, ist gespalten diesen Ausdruck auf die string[]
wie folgt aus:
{(, (, 1, +, 33,), (,), (, 4, +, (, 3, -, 5,),),)}
Ich versuche es mit Regex
Klasse zu tun
public string[] SplitString(string str)
{
return Regex.Split(str, "(?<=[()-+*/])|(?=[()-+*/])");
}
Aber Ausgangsdaten sind nicht ganz richtig:
{(, (, 1, +, 33,), (,), (, 4, +, (, **3-5**,),),)}
Sie können das Ergebnis berechnen, ohne es zu teilen. Ist das, wonach Sie suchen? – user3185569
Beachten Sie, dass ') - +' einen Bereich in Ihrer Zeichenklasse erstellt, der mehr entspricht als erwartet. Setzen Sie den Bindestrich am Ende der Zeichenklasse. –
Neben diesem ungesäumten Gedankenstrich schlage ich vor, den umgekehrten Weg zu gehen: Entsprechen Sie den gewünschten Token und geben Sie eine Liste aller Treffer zurück - Sie erhalten einen einfacheren Regex: 'return Regex.Matches (str, @" ([() + */-] | \ d +) "). Cast() .Wählen (m => m.Wert). ToArray();' –