C# Problem mit Regex

lordfritte

Lieutenant
Registriert
Juli 2006
Beiträge
955
Hallo ich habe ein kleines Problem mit Regex.
Also ich habe mir auch schon einige Tutorials zu Regex angesehen, aber dieses Thema ist eins von wenigen was ich überhaupt nicht verstehe.
Also ich habe eine Zeichenkette, z.b. "#Func1(1, 24) / #Func2(14, 78, 11)".
Diese Zeichenkette möchte ich nun mit Regex in 2 Schritten auswerten,
1. Soll er mir daraus einen string Array machen: {"Func1(1, 24)", "Func2(14, 78, 11)"}.
2. Soll er das nun weiter zerlegen, jetzt in einen 2 Dimensionalen string Array:
{{"Func1", "1", "24"}, {"Func2", "14", "78", "11"}}

Jetzt habe ich aber noch 2 Probleme:
1. Kann die Anzahl der Parameter in den Klammern variieren.
2.Jetzt könnte ich auch sowas haben: "#Func2(#Func3(12, 12), 78, 11)" hier soll er das #Func3(12, 12) so stehen lassen und nicht auswerten.
 
lordfritte schrieb:
Komplettzitat entfernt *klick*

Für so ein Anwendungsgebiet wäre ein Parsergenerator evtl. geeigneter, denn es sieht so aus, als wolltest du ja eine ganze "Grammatik" implementieren.

Falls du es doch mit RegEx machen willst, dann
zu 1. RegEx hat Metazeichen für Wiederholungen, * für 0..x, + für 1..x und {n,m} für n..m Wiederholungen.
zu 2. das wird schwierig, wenn der Grad der Verschachtelung nicht vorher bekannt ist.
 
Zuletzt bearbeitet von einem Moderator: (Komplettzitat entfernt. Bitte Regeln beachten.)
zu 2. Wobei mann könnte es doch aus dem Klammern parsen und dann mit Split(','); bearbeiten.
Das ich dann erhalte: "Func2" und "14, 78, 11"

EDIT: Wobei ich hatte gerade einen Geistesblitz, ich möchte am ende aus den Geparsten Ausdrücken ein Objekt erzeugen, was währe denn wenn ich mir das Regex spare und es mit .NET Scripting mache.
Also am Ende sehe das so aus: "Script.Func1(1, 24) + \" / \" + Script.Func2(14, 78, 11)";
 
Zuletzt bearbeitet:
Falls du noch interessiert bist...
Zu 1) "#Func\d\(\d+[,\W\d+]*\)" Mit dieser RegEx könntest du einfach einen String auf Matches abklopfen. Die einzelnen Matches werden dann halt Arrayelemente.
Zu 2) Die weitere Zerlegung würde ich einfach anhand der Trennzeichen vornehmen. Also erstmal den Funktionsnamen extrahieren, indem du nur den Teilstring bis zur Klammer betrachtest. Die Klammer überspringen und das erste Funktionsargument einlesen, bis entweder ein Komma kommt oder eben die schließende Klammer.

@Limit: Vollquottel :p
 
Zuletzt bearbeitet:
Zurück
Oben