2009-08-10 8 views
109

Mam problem z podziałem ciąg w C# z separatorem "] [".string.split - przez separator wielu znaków

Na przykład ciąg "abc] [rfd] [5] [,] [."

Powinieneś otrzymać tablicę zawierającą;
abc
RFD
,
.

Ale nie mogę sprawić, żeby zadziałało, nawet jeśli spróbuję RegEx, nie mogę uzyskać podziału na ograniczniku.

EDYCJA: Zasadniczo chciałem rozwiązać ten problem bez potrzeby używania wyrażeń regularnych. Rozwiązaniem, które akceptuję, jest;

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

Cieszę się, że mogę rozwiązać to podzielone pytanie.

+0

Czy możesz opublikować swój kod? –

+0

Pokaż nam swój kod, który się nie powiedzie. –

+0

Prosimy również o opublikowanie tego, co dostaniesz, oprócz tego, co napisałeś, co chcesz z niego wydobyć. –

Odpowiedz

202

Aby pokazać zarówno string.Split i Regex Zastosowanie:

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

Lub jeśli twój minimalny kod jest podobny do mnie: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);' –

+1

Co to jest korzyści z dostarczenia 'StringSplitOptions.None' ponad' input.Split (nowy ciąg [] {"] ["}) '? – seebiscuit

+0

Zakłada to, że istnieją obie postacie, prawda? Co się stanie, jeśli chcę podzielić przez "[" lub "]"? Z moich dotychczasowych testów wynika, że ​​to inna historia, prawda? – C4u

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

Należy zauważyć, że to podejście zakłada, że ​​chce dzielić na każdym] i [, nawet jeśli nie występują w kombinacji]. –

+2

To przeciążenie string.Split traktuje to jako 2 oddzielne ograniczniki - po prostu odrzucasz resztę. Istnieje przeciążenie, które akceptuje ciąg znaków jako ogranicznik (właściwie tablicę łańcuchów) - nie trzeba więc usuwać pustych wartości (co oznacza również: można ** znaleźć ** puste wartości, jeśli są one ważne w dane) –

+0

Twoje] założenie jest [poprawne. Nie sprecyzował, więc dałem mu coś, co zadziałałoby na jego przykład. Jeśli nie chce ich pominąć, to będzie działać. Ale bez dodatkowych informacji nigdy się nie dowiemy – SwDevMan81

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

Prawdopodobnie chcesz '\ [' gdzieś tam ... –

11

Inna opcja:

Wymienić ogranicznik ciąg z jednego znaku, a następnie podzielić na tego znaku.

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

To jest to, co robię. Daje mi znormalizowaną, ogólną metodę, która działa na wszystkich platformach bez obawy o sztuczki związane z platformą. –

+3

Niezbyt dobry pomysł. Rozważ: 'ciąg znaków =" abc] [rf-d] [5 "'. "-" w "rf-d" zostanie złapany jako ogranicznik. Zobacz zamiast tego zaakceptowaną odpowiedź powyżej. –

+0

W takim przypadku należy zastąpić i podzielić na mało prawdopodobny znak, taki jak ~ lub 'lub nawet znak inny niż klawiszowy, taki jak ¿lub ◙ itd. – seabass2020

Powiązane problemy