string.split - birden çok karakter sınırlayıcı ile


151

"# [" bir sınırlayıcı ile c # bir dize bölme sorun yaşıyorum.

Örneğin "abc] [rfd] [5] [,] [." Dizesi

Aşağıdakileri içeren bir dizi vermelidir;
abc
RfD
5
,
.

Ama RegEx'i denesem bile sınırlayıcıda bir bölünme elde edemiyorum.

EDIT: Temelde bu sorunu düzenli bir ifade gerek kalmadan çözmek istedim. Kabul ettiğim çözüm;

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

Bu bölünmüş soruyu çözebildiğim için mutluyum.

c#  split 

Başarısız olan kodunuzu bize gösterin.
Konrad Rudolph

Ayrıca, ne yayınladığınıza, ne almak istediğinize ek olarak lütfen bundan ne çıkardığınızı da gönderin.
Lasse V. Karlsen

Yanıtlar:


268

Her ikisini de string.Splitve Regexkullanımını göstermek için :

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

5
Veya en az kodunuz benim gibi anal olursa: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);'
Paul Grimshaw

2
Sağlama yararı nedir StringSplitOptions.Noneover input.Split(new string[] { "][" })?
seebiscuit

1
Bu, her iki karakterin de olduğunu varsayar, doğru mu? Ya "[" veya "]" ile bölmek istersem ne olur? Şimdiye kadar yaptığım testlerden farklı bir hikaye olduğunu tahmin ediyorum, değil mi?
C4d

Teşekkür ederim, Çalışır !!
Kumar

3
@ C4u String.Split("[]".ToCharArray())bu hem [hem de] ayrı ayrı bölünür. Örneğin: Merhaba [Dünya] Onun [Ben! olurdu: Merhaba, Dünya, Onun, Ben!
Ma Dude

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

8
Bu yaklaşımın,] [kombinasyonunda görünmese bile] ve [üzerine bölünmek anlamına geldiğini varsaydığını unutmayın.
Lasse V. Karlsen

2
Dizenin aşırı yüklenmesi.Split, 2 ayrı sınırlayıcı olarak davranıyor - sadece geri kalanını atıyorsunuz. Bir dizeyi sınırlayıcı olarak kabul eden bir aşırı yük vardır (aslında, bir dizeler dizisi) - bu nedenle boş değerleri kaldırmanız gerekmez (ayrıca: verilerde geçerli olduklarında boş değerler bulabilirsiniz )
Marc Gravell

Varsayımınız [doğru]. Belirtmedi, bu yüzden ona örneği için işe yarayacak bir şey verdim. Onları atlamak istemiyorsa işe yarayacaktır. Ancak daha fazla bilgi olmadan, asla bilemeyiz
SwDevMan81

Aradığım şey buydu . Soruda bu basit bir sorundu ama bu gelişmiş bir cevaptı.
Bitterblue

Tam da aradığım şey buydu. Ama doğru cevap benim için haber, Marc'ın açıkladığı gibi birden fazla karakterle bölünebileceğini bilmiyordum. Sözdizimi oldukça saçma.
Piotr Kula

13

Başka seçenek:

Dize sınırlayıcıyı tek bir karakterle değiştirin, ardından bu karaktere bölün.

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

1
Bu benim işim. Bana platforma özgü hileler konusunda endişelenmenize gerek kalmadan tüm platformlarda çalışan normalleştirilmiş, genel bir yöntem sunuyor.
David Betz

5
İyi bir fikir değil. Düşünün: string input = "abc][rf-d][5". "Rf-d" içindeki "-" bir sınırlayıcı olarak yakalanacaktır. Bunun yerine yukarıdaki kabul edilen cevaba bakınız.
Gilad Barner

Bu durumda, ~ veya `gibi beklenmeyen bir karakterle ve hatta ¿veya ◙ vb gibi klavye olmayan bir karakterle değiştirin ve bu karaktere
bölün

1
Berrak, sağlam ve normalleşebilmesi durumunda çözümü seviyorum. KullanımımDim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
Nasenbaer

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.