2009-08-10 18 views
109

ho problemi a dividere una stringa in C# con un delimitatore di "] [".string.split - con delimitatore a più caratteri

Ad esempio la stringa "abc] [rfd] [5] [,] [."

Dovrebbe produrre un array contenente;
abc
rfd
,
.

Ma non riesco a farlo funzionare, anche se provo RegEx non riesco a ottenere una divisione sul delimitatore.

EDIT: In sostanza, volevo risolvere questo problema senza la necessità di un'espressione regolare. La soluzione che accetto è;

string Delimiter = "]["; 
var Result[] = StringToSplit.Split(new[] { Delimiter }, StringSplitOptions.None); 

io sono felice di essere in grado di risolvere questo problema di divisione.

+0

Puoi pubblicare il tuo codice? –

+0

Mostraci il tuo codice che fallisce. –

+0

Inoltre, si prega di postare ciò che si ottiene da esso, oltre a ciò che hai postato, ciò che si vuole ottenere da esso. –

risposta

202

Per mostrare sia string.Split e Regex utilizzo:

string input = "abc][rfd][5][,][."; 
string[] parts1 = input.Split(new string[] { "][" }, StringSplitOptions.None); 
string[] parts2 = Regex.Split(input, @"\]\["); 
+4

O se il tuo codice minimo analico come me: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);' –

+1

Qual è il vantaggio di fornire 'StringSplitOptions.None' su' input.Split (nuova stringa [] {"] ["}) '? – seebiscuit

+0

Questo presuppone che ci siano entrambi i personaggi, giusto? Cosa succede se voglio dividere con "[" o "]"? Dalle mie prove fino ad ora immagino che questa sia una storia diversa, giusto? – C4u

23
string tests = "abc][rfd][5][,][."; 
string[] reslts = tests.Split(new char[] { ']', '[' }, StringSplitOptions.RemoveEmptyEntries); 
+4

Si noti che questo approccio presuppone che egli intenda suddividere su ogni] e [, anche quando non appaiono nella [] combinazione. –

+2

Quel sovraccarico di stringa.Split lo considera come 2 delimitatori separati: semplicemente stai scartando il resto. C'è un sovraccarico che accetta una stringa come delimitatore (in realtà, una matrice di stringhe) - quindi non devi rimuovere i valori vuoti (nel senso anche: puoi ** trovare ** valori vuoti quando esistono validamente nel dati) –

+0

Il tuo] presupposto è [corretto. Non ha specificato, quindi gli ho dato qualcosa che avrebbe funzionato per il suo esempio. Se non vuole saltarli, allora funzionerebbe. Ma senza ulteriori informazioni, non lo sapremo mai – SwDevMan81

2
Regex.Split("abc][rfd][5][,][.", @"\]\]"); 
+7

Probabilmente vuoi un '\ [' lì da qualche parte ... –

11

Un'altra opzione:

Sostituire il delimitatore di stringa con un solo carattere, poi divisi su quel personaggio.

string input = "abc][rfd][5][,][."; 
string[] parts1 = input.Replace("][","-").Split('-'); 
+1

Questo è quello che faccio. Mi dà un metodo generale normalizzato che funziona su tutte le piattaforme senza doversi preoccupare dei trucchi specifici della piattaforma. –

+3

Non è una buona idea. Considera: 'stringa input =" abc] [rf-d] [5 "'. Il "-" in "rf-d" verrà catturato come delimitatore. Vedere invece la risposta accettata sopra. –

+0

In tal caso, sostituire con e dividere un carattere improbabile come ~ o 'o anche un carattere diverso da tastiera come ¿o ◙ ecc. – seabass2020

Problemi correlati