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.