string.split - कई चरित्र सीमांकक द्वारा


151

मुझे "#] के सीमांकक के साथ c # में एक स्ट्रिंग को विभाजित करने में समस्या हो रही है।

उदाहरण के लिए स्ट्रिंग "abc] [rfd] [5] [,] []।"

एक सरणी युक्त उपज चाहिए;
एबीसी
आरएफडी
5
,

लेकिन मुझे लगता है कि यह काम करने के लिए नहीं मिल सकता है, भले ही मैं RegEx की कोशिश करता हूं मैं सीमांकक पर विभाजन नहीं पा सकता हूं।

संपादित करें: अनिवार्य रूप से मैं एक नियमित अभिव्यक्ति की आवश्यकता के बिना इस मुद्दे को हल करना चाहता था। जो समाधान मुझे स्वीकार है, वह है;

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

मुझे इस विभाजन प्रश्न को हल करने में सक्षम होने की खुशी है।

c#  split 

हमें अपना कोड दिखाएं जो विफल हो।
कोनराड रुडोल्फ

इसके अलावा, कृपया पोस्ट करें कि आपने क्या प्राप्त किया है, इसके अलावा आपने क्या पोस्ट किया है, आप इससे बाहर क्या चाहते हैं।
लास वी। कार्लसन

जवाबों:


268

दोनों दिखाने के लिए string.Splitऔर Regexउपयोग:

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

5
या अगर मेरे जैसा आपका न्यूनतम कोड गुदा: 'var part1 = input.Split (नया [] {"] ["}, StringSplitOptions.None);'
पॉल ग्रिमशॉ

2
StringSplitOptions.Noneओवर प्रदान करने का क्या लाभ है input.Split(new string[] { "][" })?
Seebiscuit

1
यह निर्धारित करता है, कि दोनों पात्र सही हैं? क्या होगा अगर मैं "[" या "]" से विभाजित करना चाहता हूं? मेरे परीक्षणों से अब तक मुझे लगता है कि एक अलग कहानी है, है ना?
C4d

थैंक यू, इट वर्क्स !!
कुमार

3
@ C4u String.Split("[]".ToCharArray())यह [और] दोनों को अलग-अलग विभाजित करेगा। उदाहरण के लिए: हैलो [विश्व] इसका [मैं! होगा: हैलो, वर्ल्ड, इट्स, मी!
Ma Dude

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

8
ध्यान दें कि यह दृष्टिकोण मानता है कि वह हर पर विभाजित करने का मतलब है] और [, तब भी जब वे] [संयोजन में प्रकट नहीं होते हैं।
लास वी। कार्लसन

2
स्ट्रिंग का वह अधिभार .plit इसे 2 अलग-अलग सीमांकक के रूप में मान रहा है - बस आप बाकी को छोड़ रहे हैं। एक अधिभार है जो एक स्ट्रिंग को सीमांकक के रूप में स्वीकार करता है (वास्तव में, स्ट्रिंग्स की एक सरणी) - इसलिए आपको खाली मूल्यों को हटाने की आवश्यकता नहीं है (इसका अर्थ यह भी है: जब आप डेटा में वैध रूप से मौजूद होते हैं तो आप खाली मान पा सकते हैं )
मार्क बजरी

आपकी] धारणा [सही है। उसने निर्दिष्ट नहीं किया, इसलिए मैंने उसे कुछ दिया जो उसके उदाहरण के लिए काम करेगा। अगर वह उन्हें छोड़ना नहीं चाहता, तो वह काम करेगा। लेकिन अधिक जानकारी के बिना, हम कभी नहीं जान
पाएंगे

यही मैं ढूंढ रहा था। प्रश्न में यह एक साधारण समस्या थी लेकिन यह एक उन्नत उत्तर है।
बिटरब्लू

मुझे इसी की तो तलाश थी। लेकिन सही उत्तर भी मेरे लिए खबर है, पता नहीं था कि आप मार्क द्वारा वर्णित एक से अधिक वर्णों के साथ विभाजित हो सकते हैं। वाक्यविन्यास बहुत बकवास है।
पिओटर कुला

13

एक अन्य विकल्प:

स्ट्रिंग सीमांकक को एकल वर्ण से बदलें, फिर उस वर्ण पर विभाजित करें।

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

1
मैं यह करता हूं। यह मुझे एक सामान्यीकृत, सामान्य विधि देता है जो सभी प्लेटफार्मों पर काम करता है, बिना प्लेटफॉर्म-विशिष्ट ट्रिक्स के बारे में चिंता किए बिना।
डेविड बैतज़

5
अच्छा विचार नहीं। पर विचार करें: string input = "abc][rf-d][5"। "Rf-d" में "-" को एक सीमांकक के रूप में पकड़ा जाएगा। इसके बजाय ऊपर दिए गए स्वीकृत उत्तर को देखें।
गिलाद बारनर

उस स्थिति में, एक असंभावित चरित्र जैसे ~ या `या यहां तक ​​कि एक गैर-कीबोर्ड चरित्र जैसे कि ◙ या
ass

1
मुझे इसका स्पष्ट, मजबूत और सामान्यीकृत होने की स्थिति में समाधान पसंद है। मेरा उपयोगDim Levels As New List(Of String)(newSelectedTask.Replace(LevelDelimter, Chr(13)).Split(Chr(13)))
२०:१०

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.