string.split - โดยตัวคั่นหลายตัว


151

ฉันมีปัญหาในการแยกสตริงใน c # ด้วยตัวคั่นของ "] ["

ตัวอย่างเช่นสตริง "abc] [rfd] [5] [,] [."

ควรสร้างอาร์เรย์ที่มี
abc
RFD
5 ,

แต่ฉันไม่สามารถทำให้มันใช้งานได้แม้ว่าฉันจะลอง RegEx แล้วก็ตามฉันไม่สามารถแยกตัวคั่นได้

แก้ไข: โดยพื้นฐานแล้วฉันต้องการแก้ไขปัญหานี้โดยไม่ต้องใช้นิพจน์ปกติ ทางออกที่ฉันยอมรับคือ;

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

ฉันดีใจที่สามารถแก้ไขคำถามแยกนี้ได้

c#  split 

แสดงรหัสของคุณที่ล้มเหลว
Konrad Rudolph

นอกจากนี้โปรดโพสต์สิ่งที่คุณได้รับนอกเหนือจากสิ่งที่คุณโพสต์สิ่งที่คุณต้องการออกจากมัน
Lasse V. Karlsen

2
มีความเป็นไปได้ที่ซ้ำกันของการแยกสตริงด้วยสตริงอื่นใน C #
puzzlepiece87

คำตอบ:


268

ในการแสดงทั้งสองstring.SplitและRegexการใช้งาน:

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

5
หรือถ้ารหัสน้อยที่สุดของคุณชอบฉัน: 'var parts1 = input.Split (ใหม่ [] {"] ["}, StringSplitOptions.None);'
Paul Grimshaw

2
ประโยชน์ของการให้StringSplitOptions.Noneมากกว่าinput.Split(new string[] { "][" })คืออะไร?
seebiscuit

1
ข้อสันนิษฐานนี้มีตัวละครทั้งคู่ใช่ไหม? ถ้าฉันต้องการแยกด้วย "[" หรือ "]" จากการทดสอบของฉันจนถึงตอนนี้ฉันเดาว่ามันเป็นเรื่องที่แตกต่างใช่มั้ย
C4d

ขอบคุณมันได้ผล !!
Kumar

3
@ C4u String.Split("[]".ToCharArray())สิ่งนี้จะแยกทั้ง [และ] แยกต่างหาก ตัวอย่างเช่น: สวัสดี [โลก] มัน [Me! จะเป็น: สวัสดีโลกมันฉัน!
Ma Dude

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

8
โปรดทราบว่าวิธีการนี้ถือว่าเขาหมายถึงการแยกในทุก ๆ ] และ [แม้ว่าจะไม่ปรากฏในชุดค่าผสม] [
Lasse V. Karlsen

2
การโอเวอร์โหลดของสตริงนั้นแยกออกมาถือว่าเป็นตัวคั่น 2 ตัวแยกกัน - เพียงแค่คุณละทิ้งส่วนที่เหลือ มีโอเวอร์โหลดที่ยอมรับสตริงเป็นตัวคั่น (จริง ๆ แล้วคืออาร์เรย์ของสตริง) - ดังนั้นคุณไม่จำเป็นต้องลบค่าว่าง (หมายความว่า: คุณสามารถหาค่าว่างเมื่อมีอยู่ในข้อมูล)
Marc Gravell

สมมติฐานของคุณคือ [ถูกต้อง เขาไม่ได้ระบุดังนั้นฉันจึงให้บางอย่างที่เหมาะกับตัวอย่างของเขา หากเขาไม่ต้องการที่จะข้ามพวกเขาก็จะทำงาน แต่หากไม่มีข้อมูลเพิ่มเติมเราจะไม่มีทางรู้ว่าคุณจะทำอะไรได้บ้าง
SwDevMan81

นั่นคือสิ่งที่ฉันกำลังมองหา ในคำถามมันเป็นปัญหาง่าย ๆ แต่นี่เป็นคำตอบขั้นสูง
Bitterblue

นั่นคือสิ่งที่ฉันกำลังมองหา แต่คำตอบที่ถูกต้องก็เป็นข่าวสำหรับฉันเช่นกันไม่รู้ว่าคุณสามารถแยกตัวละครได้มากกว่าหนึ่งตัวตามที่ Marc อธิบาย รูปแบบคือขยะค่อนข้างสวย
Piotr Kula

13

ตัวเลือกอื่น:

แทนที่ตัวคั่นสตริงด้วยอักขระตัวเดียวจากนั้นแยกอักขระนั้น

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

1
นี่คือสิ่งที่ฉันทำ มันให้วิธีการทั่วไปที่ได้มาตรฐานกับฉันบนแพลตฟอร์มทั้งหมดโดยไม่ต้องกังวลกับเทคนิคเฉพาะแพลตฟอร์ม
David Betz

5
ไม่ใช่ความคิดที่ดี พิจารณา: string input = "abc][rf-d][5". "-" ใน "rf-d" จะถูกจับเป็นตัวคั่น ดูคำตอบที่ยอมรับข้างต้นแทน
Gilad Barner

ในกรณีนั้นให้แทนที่ด้วยและแยกอักขระที่ไม่น่าจะเป็นเช่น ~ หรือ `หรือแม้แต่อักขระที่ไม่ใช่คีย์บอร์ดเช่น¿หรือ◙เป็นต้น
seabass2020

1
ฉันชอบทางออกในกรณีที่ชัดเจนแข็งแกร่งและสามารถกลายเป็นมาตรฐาน การใช้งานของฉันDim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
Nasenbaer

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.