2009-08-10 9 views
109

je ne parviens pas à diviser une chaîne en C# avec un séparateur de « ] [ ».string.split - par delimiter plusieurs caractères

Par exemple, la chaîne "abc] [rfd] [5] [,] [."

devrait donner un tableau contenant;
abc
rfd
,
.

Mais je ne peux pas sembler le faire fonctionner, même si j'essaie RegEx je ne peux pas obtenir une scission sur le delimiter.

EDIT: Essentiellement, je voulais résoudre ce problème sans la nécessité d'une expression régulière. La solution que j'accepte est;

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

Je suis heureux de pouvoir résoudre cette question scindée.

+0

Pouvez-vous envoyer votre code? –

+0

Montrez-nous votre code qui échoue. –

+0

En outre, s'il vous plaît poster ce que vous en sortez, en plus de ce que vous avez posté, ce que vous voulez en sortir. –

Répondre

202

Pour montrer à la fois string.Split et Regex utilisation:

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

Ou si votre code minimal anale comme moi: 'var parts1 = input.Split (new [] {"] ["], StringSplitOptions.None);' –

+1

Quel est l'avantage de fournir 'StringSplitOptions.None' sur' input.Split (new string [] {"] ["]) '? – seebiscuit

+0

Cela suppose que les deux personnages ont raison? Que faire si je veux diviser par "[" ou "]"? De mes tests jusqu'à présent, je suppose que c'est une histoire différente, non? – C4u

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

Notez que cette approche suppose qu'il veut diviser sur tout] et [, même quand ils n'apparaissent pas dans la combinaison]. –

+2

Cette surcharge de string.Split le traite comme 2 délimiteurs séparés - vous êtes simplement en train de jeter le reste. Il y a une surcharge qui accepte une chaîne comme un délimiteur (en fait, un tableau de chaînes) - donc vous n'avez pas besoin de supprimer les valeurs vides (ce qui signifie aussi: vous pouvez ** trouver ** des valeurs vides quand elles existent valablement dans le données) –

+0

Votre] hypothèse est [correcte. Il n'a pas précisé, donc je lui ai donné quelque chose qui fonctionnerait pour son exemple. S'il ne veut pas les ignorer, alors ça marchera. Mais sans plus d'informations, nous ne le saurons jamais – SwDevMan81

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

Vous voulez probablement un '\ [' dans quelque part ... –

11

Une autre option:

Remplacer le séparateur de chaîne avec un seul caractère, puis le partage sur ce caractère.

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

C'est ce que je fais. Cela me donne une méthode générale normalisée qui fonctionne sur toutes les plateformes sans avoir à se soucier des astuces spécifiques à la plate-forme. –

+3

Pas une bonne idée. Considérons: 'chaîne input =" abc] [rf-d] [5 "'. Le "-" dans "rf-d" sera pris comme un délimiteur. Voir la réponse acceptée ci-dessus à la place. –

+0

Dans ce cas, remplacez avec et divisez un caractère improbable tel que ~ ou 'ou même un caractère non-clavier tel que ¿ou ◙ etc. – seabass2020

Questions connexes