string.split - dal delimitatore di più caratteri


151

sto riscontrando problemi a dividere una stringa in c # con un delimitatore di "] [".

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

Dovrebbe produrre un array contenente;
abc
RFD
5
,
.

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

EDIT: essenzialmente 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);

Sono felice di essere in grado di risolvere questa domanda divisa.

c#  split 

Mostraci il tuo codice che non funziona.
Konrad Rudolph,

Inoltre, si prega di pubblicare ciò che si ottiene da esso, oltre a ciò che è stato pubblicato, ciò che si desidera ottenere da esso.
Lasse V. Karlsen,

Risposte:


268

Per mostrare sia string.Splite l' Regexutilizzo:

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

5
O se il tuo anal minimo di codice mi piace: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);'
Paul Grimshaw,

2
Qual è il vantaggio di fornire l' StringSplitOptions.Noneover input.Split(new string[] { "][" })?
SeeBiscuit

1
Ciò presuppone che ci siano entrambi i personaggi, giusto? Cosa succede se desidero dividere per "[" o "]"? Dai miei test fino ad ora immagino che sia una storia diversa, giusto?
C4d

Grazie, funziona !!
Kumar,

3
@ C4u String.Split("[]".ToCharArray())questo sarebbe diviso per [e] separatamente. Ad esempio: Hello [World] Its [Me! sarebbe: Hello, World, Its, Me!
Ma Dude,

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

8
Si noti che questo approccio presuppone che intende dividere su ogni] e [, anche quando non compaiono nella combinazione] [.
Lasse V. Karlsen,

2
Quel sovraccarico di stringa.Split lo sta trattando 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 è necessario rimuovere i valori vuoti (che significa anche: puoi trovare valori vuoti quando esistono validamente nei dati)
Marc Gravell

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

Questo è quello che stavo cercando. Nella domanda era un problema semplice ma questa è una risposta avanzata.
Bitterblue,

Era esattamente quello che stavo cercando. Ma la risposta corretta è anche una novità per me, non sapevo che potevi dividerti con più di un personaggio come descritto da Marc. La sintassi è piuttosto spazzatura.
Piotr Kula,

13

Un'altra opzione:

Sostituisci il delimitatore di stringa con un singolo carattere, quindi dividi quel carattere.

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

1
Questo è ciò che faccio. Mi dà un metodo normalizzato e generale che funziona su tutte le piattaforme senza doversi preoccupare di trucchi specifici della piattaforma.
David Betz,

5
Non è una buona idea. Prendere in considerazione: string input = "abc][rf-d][5". Il "-" in "rf-d" verrà catturato come delimitatore. Vedi invece la risposta accettata sopra.
Gilad Barner,

In tal caso, sostituisci con e dividi un carattere improbabile come ~ o `o anche un carattere non tastiera come ¿o ◙ ecc.
seabass2020

1
Mi piace la soluzione nel caso in cui sia chiara, robusta e possa diventare normalizzata. Il mio utilizzoDim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
Nasenbaer,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.