Esempio di testo (che ho messo in evidenza i desiderati /
's):Get slash se non entro parentesi quadre
coppia [@ Key = 2] Articoli /
/
Articolo [Persona/Name =' Martin'] /
Data
Sto provando a ottenere ogni barra in avanti che non sia all'interno di una parentesi quadra, chiunque sia in grado di aiutarmi con Regex in questo? L'uso sarebbe:
string[] result = Regex.Split(text, pattern);
ho fatto con questo codice, ma chiedevo se ci fosse un Regex più semplice che avrebbe fatto la stessa cosa:
private string[] Split()
{
List<string> list = new List<string>();
int pos = 0, i = 0;
bool within = false;
Func<string> add =() => Format.Substring(pos, i - pos);
//string a;
for (; i < Format.Length; i++)
{
//a = add();
char c = Format[i];
switch (c)
{
case '/':
if (!within)
{
list.Add(add());
pos = i + 1;
}
break;
case '[':
within = true;
break;
case ']':
within = false;
break;
}
}
list.Add(add());
return list.Where(s => !string.IsNullOrEmpty(s)).ToArray();
}
Per chiarire che cosa significa "casi pratici" per questa risposta, questa espressione regolare funzionerà finché non è possibile "annidare" le parentesi quadre. Se puoi fare qualcosa del genere: 'asdf [123 [456] \] jkl' allora questa risposta non funzionerà. – Servy
@Servy Hai perfettamente ragione: se vuoi consentire parentesi annidate, le soluzioni basate su regexp non sarebbero teoricamente possibili, per la stessa ragione per cui non è possibile scrivere una stringa regex con stringhe bilanciate con parentesi sbilanciate. – dasblinkenlight
Questo funziona grazie - ma posso andare con la soluzione di @recursive –