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.


sumber
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
2
Kemungkinan rangkap dari Membagi string dengan string lain di C #
puzzlepiece87

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, @"\]\[");
Marc Gravell
sumber
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);
SwDevMan81
sumber
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('-');
seabass2020
sumber
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
2
Regex.Split("abc][rfd][5][,][.", @"\]\]");
Christopher Klewes
sumber