Regex für variable Deklaration und Initialisierung in c #
-
06-09-2019 - |
Frage
Ich möchte ein RegEx schreiben, um die Variablenwerte alle und aus der Variablendeklarations Erklärung ihre Namen zu ziehen. Sprich ich habe
int i, k = 10, L = 0
Ich möchte einen regulären Ausdruck so etwas wie s int \ schreiben ^ ,? | (^ ,?) * aber dies wird auch akzeptieren k = 10 h (ohne int vorhergehenden it) Grundsätzlich Idee ist, Wenn Zeichenfolge beginnt mit int dann erhalten die Variablenliste getrennt durch,
Ich weiß, csv Werte zu extrahieren, aber hier meine Zeichenfolge hat einigen Anfangswert als auch. Wie kann ich es beheben?
Lösung
Starten Sie über die Struktur einer Definition zu denken, sagen wir,
(a line can start with some spaces) followed by,
(Type) followed by
(at least one space)
(variable_1)
(optionally
(comma // next var
|
'='number // initialization
) ...`
dann versuchen, jede Gruppe zu konvertieren:
^ \s* \w+ \s+ \w+ ? (',' | '=' \d+ ) ...
line some type at least var optionally more or init some
start spaces (some chars) one space (some chars) vars val digits
als Hausaufgaben Linke Leerzeichen zu entfernen und die endgültige regex zu reparieren.
Andere Tipps
Hier finden Sie einige nützliche Informationen, die Sie verwenden können,
Sie können Ihren regulären Ausdruck aus der [C # Grammatik] ( http://msdn.microsoft.com/en-us/library/aa664812 (VS.71) .aspx) . Doch der Aufbau einen Parser wäre sicherlich besser sein.
Versuchen Sie folgendes:
^(int|[sS]tring)\s+\w+\s*(=\s*[^,]+)?(,\s*\w+\s*(=\s*[^,]+)?)*$
Es wird Ihr Beispiel-Code übereinstimmen
int i,k = 10,l=0
Und einige Annahmen über die Sprache zu machen können Sie oder können nicht verwenden, es wird auch passen:
int i, j, k=10, l=0
string i=23, j, k=10, l=0