2009-08-10 8 views
109

द्वारा मुझे सी # में एक स्ट्रिंग को "] [" के डिलीमीटर के साथ विभाजित करने में समस्या हो रही है।string.split - एकाधिक वर्ण डिलीमीटर

उदाहरण के लिए स्ट्रिंग "एबीसी] [आरएफडी] [5] [,] [।"

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

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

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

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

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

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

क्या आप अपना कोड पोस्ट कर सकते हैं? –

+0

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

+0

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

उत्तर

202

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

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

या यदि आपका न्यूनतम कोड मेरे जैसा गुदा है: 'var parts1 = input.Split (नया [] {"] ["}, स्ट्रिंगस्प्लिटऑप्शन.नोन);' –

+1

'इनपुट पर' StringSplitOptions.None' प्रदान करने का क्या फायदा है। स्प्लिट (नई स्ट्रिंग [] {"] ["}) '? – seebiscuit

+0

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

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

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

+2

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

+0

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

2
Regex.Split("abc][rfd][5][,][.", @"\]\]"); 
+7

शायद आप कहीं \ '[\' वहां कहीं भी चाहते हैं ... –

11

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

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

+1

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

+3

कोई अच्छा विचार नहीं है। विचार करें: 'स्ट्रिंग इनपुट = "एबीसी] [आरएफ-डी] [5" '। "आरएफ-डी" में "-" एक डिलीमीटर के रूप में पकड़ा जाएगा। इसके बजाय स्वीकृत उत्तर देखें। –

+0

उस स्थिति में, एक संभावित चरित्र जैसे ~ या 'या यहां तक ​​कि गैर-कीबोर्ड वर्ण जैसे ¿या ◙ इत्यादि के साथ प्रतिस्थापित करें और विभाजित करें। – seabass2020

संबंधित मुद्दे