Bene.
Pero' fra 6 mesi, se devo rileggere, mi viene mal di testa.
Edit: Ripropongo, visto che ogni tanto pensare 1 minuto in piu' e' meglio.
Propongo la seguente, con una modifica variante dell'originale, sostanzialmetne identico alla tua
Codice:
static void Main(string[] args)
{
string mstr = "1,-400,400,3,243834,'AAAAAA',52895,'BBBBB',660,'CCC,CCC,¬',2";
mstr = Regex.Replace(mstr, "'[^']*'", str => str.Value.Replace(',', '£'));
var res = mstr
.Split(',')
.Select(str => str.Replace('£', ','))
.ToArray();
}
Per la Regex, e' da leggersi cosi':
Cerco tutte le sottosequenze che cominciano con ', terminano con ' e in mezzo hanno un qualsiasi set di caratteri (Eventualmente vuoto) NON composto '
sostituisco ciascuna di queste occorrenze con una nuova stringa, identica a ciascuna di quelle trovate, nelle quali sostituisco ciascun ',' con un '£'
L'ultimo invece e' una sequenza che serve solo per splittare su ',' rimpiazzare i '£' in ciascuna sottostringa e restituire l'array delle sottostringhe.
Occhio.
Il tuio primo ciclo cambia il dominio del for all'interno del ciclo stesso, e non e' mai troppo bello.
E la tua ultima parte e' poco effciente.
Le stringhe sono immutabili in C#. Ogni volta che scrivi
spl[j] = r.Replace('€', ','); //Basterebbe mettere spl[j]=','; no?
viene fatta una copia integrale della stringa, dove viene rimpiazzato solo l'elemento scelto...