string.split - oleh pembatas beberapa karakter


151

saya mengalami kesulitan memisahkan string dalam c # dengan pembatas "] [".

Misalnya string "abc] [rfd] [5] [,] [."

Harus menghasilkan array yang mengandung;
abc
RFD
5
,
.

Tapi sepertinya saya tidak bisa membuatnya berfungsi, bahkan jika saya mencoba RegEx saya tidak bisa mendapatkan pembatas pada pembatas.

EDIT: Pada dasarnya saya ingin menyelesaikan masalah ini tanpa perlu Ekspresi Reguler. Solusi yang saya terima adalah;

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

Saya senang bisa menyelesaikan pertanyaan ini.

c#  split 

Tunjukkan pada kami kode Anda yang gagal.
Konrad Rudolph

Juga, tolong posting apa yang Anda dapatkan dari itu, di samping apa yang telah Anda posting, apa yang ingin Anda dapatkan darinya.
Lasse V. Karlsen

Jawaban:


268

Untuk menampilkan keduanya string.Splitdan Regexpenggunaan:

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

5
Atau jika kode minimal Anda seperti saya: 'var parts1 = input.Split (new [] {"] ["}, StringSplitOptions.None);'
Paul Grimshaw

2
Apa manfaat dari memberikan StringSplitOptions.Nonekelebihan input.Split(new string[] { "][" })?
seebiscuit

1
Ini mengandaikan, bahwa ada kedua karakter yang benar? Bagaimana jika saya ingin membagi dengan "[" atau "]"? Dari tes saya sejauh ini saya kira itu cerita yang berbeda, kan?
C4d

Terima Kasih, Berhasil !!
Kumar

3
@ C4u String.Split("[]".ToCharArray())ini akan dibagi dengan [dan] secara terpisah. Sebagai contoh: Hello [World] Its [Me! akan menjadi: Halo, Dunia, Ini, Aku!
Ma Dude

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

8
Perhatikan bahwa pendekatan ini mengasumsikan bahwa dia bermaksud untuk memecah pada setiap] dan [, bahkan ketika mereka tidak muncul dalam] [kombinasi.
Lasse V. Karlsen

2
Kelebihan string itu. Plit memperlakukannya sebagai 2 pembatas yang terpisah - cukup Anda membuang sisanya. Ada kelebihan yang menerima string sebagai pembatas (sebenarnya, array string) - jadi Anda tidak harus menghapus nilai-nilai kosong (artinya juga: Anda dapat menemukan nilai-nilai kosong ketika mereka secara sah ada dalam data)
Marc Gravell

Asumsi Anda adalah [benar. Dia tidak merinci, jadi saya memberinya sesuatu yang akan berhasil untuk contohnya. Jika dia tidak ingin melewati mereka, maka akan berhasil. Tetapi tanpa informasi lebih lanjut, kita tidak akan pernah tahu
SwDevMan81

Itu yang saya cari. Dalam pertanyaan itu adalah masalah yang sederhana tetapi ini adalah jawaban lanjutan.
Bitterblue

Itulah tepatnya yang saya cari. Tetapi jawaban yang benar juga berita bagi saya, tidak tahu Anda bisa berpisah dengan lebih dari satu karakter seperti yang dijelaskan Marc. Sintaksnya sangat sampah.
Piotr Kula

13

Pilihan lain:

Ganti pembatas string dengan satu karakter, lalu bagi karakter tersebut.

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

1
Inilah yang saya lakukan. Ini memberi saya metode umum yang dinormalisasi yang bekerja pada semua platform tanpa harus khawatir tentang trik khusus platform.
David Betz

5
Bukan ide yang bagus. Pertimbangkan: string input = "abc][rf-d][5". Tanda "-" dalam "rf-d" akan ditangkap sebagai pembatas. Lihat jawaban yang diterima di atas sebagai gantinya.
Gilad Barner

Dalam hal itu, ganti dengan dan pisahkan pada karakter yang tidak mungkin seperti ~ atau `atau bahkan karakter non-keyboard seperti ¿atau

1
Saya suka solusinya jika jelas, kuat, dan bisa dinormalisasi. Penggunaan sayaDim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
Nasenbaer

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.