RegEx per dichiarazione di variabile e l'inizializzazione in C #
-
06-09-2019 - |
Domanda
Voglio scrivere una regex per tirare fuori tutti i valori delle variabili ed i loro nomi dalla dichiarazione dichiarazione delle variabili. Dire che ho
int i, k = 10, l = 0
voglio scrivere un qualcosa di regex come int \ s ^ ,? | (^ ,?) * ma questo sarà anche accettare k = 10 cioè (senza int precede) Fondamentalmente idea è Se stringa inizia con int allora ottenere l'elenco delle variabili separato da,
che conosco per estrarre i valori csv, ma qui la mia stringa ha un certo valore iniziale. Come posso risolverlo?
Soluzione
Inizia a pensare alla struttura di una definizione, per esempio,
(a line can start with some spaces) followed by,
(Type) followed by
(at least one space)
(variable_1)
(optionally
(comma // next var
|
'='number // initialization
) ...`
quindi provare a convertire ogni gruppo:
^ \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
A sinistra come compito a casa per rimuovere gli spazi e sistemare la regex finale.
Altri suggerimenti
Ecco alcune informazioni utili che è possibile utilizzare
Si potrebbe costruire la vostra espressione regolare dalla [C # Grammar] ( http://msdn.microsoft.com/en-us/library/aa664812 (VS.71) aspx) . Ma costruire un parser sarebbe certamente migliore.
Prova questo:
^(int|[sS]tring)\s+\w+\s*(=\s*[^,]+)?(,\s*\w+\s*(=\s*[^,]+)?)*$
Sarà abbinare il vostro codice di esempio
int i,k = 10,l=0
E facendo qualche ipotesi circa la lingua che si può o non si sta utilizzando, sarà anche partner:
int i, j, k=10, l=0
string i=23, j, k=10, l=0