2013-02-13 6 views
5

में लिपटे शब्द से मेल खाने के लिए रेगेक्स क्या होगा, मैं डबल ब्रैकेट से घिरे एक शब्द पर मिलान और विभाजन के लिए सही रेगेक्स वाक्यविन्यास खोजने की कोशिश कर रहा हूं।डबल ब्रैकेट्स

const string originalString = "I love to [[verb]] while I [[verb]]."; 

मैं

var arrayOfStrings = Regex.Split(originalString,@"\[\[(.+)\]\]"); 

की कोशिश की लेकिन इसे सही ढंग से काम नहीं किया। मुझे लगता है मैं गलत

क्या कर रहा हूँ पता नहीं है मैं arrayOfStrings चाहते तो

arrayOfStrings[0] = "I love to " 
arrayOfStrings[1] = "[[verb]]" 
arrayOfStrings[2] = " while I " 
arrayOfStrings[3] = "[[verb]]" 
arrayOfStrings[4] = "." 

उत्तर

8

की तरह बाहर आने के लिए होगा मुझे लगता है कि तुम क्या जरूरत है।

string input = "I love to [[verb]] while I [[verb]]."; 
string pattern = @"(\[\[.+?\]\])"; 

string[] matches = Regex.Split(input, pattern); 

foreach (string match in matches) 
{ 
    Console.WriteLine(match); 
} 
+0

यह ब्रैकेट किए गए शब्दों को हटा देगा, जो उपयोगकर्ता नहीं चाहता है। – JDB

+0

साइबोर्गक्स 37, ब्रैकेट को हटाया नहीं जाएगा। लॉरेंस बर्क ने जो पूछा वह ठीक से लौट आएगा। –

+0

आप सही हैं। मेरी गलती - स्पष्ट रूप से मैंने Regex.Split फ़ंक्शन को गलत समझा है। दुर्भाग्यवश, जब मैं अपना डाउनवोट हटाने का प्रयास करता हूं तो मुझे एक त्रुटि संदेश मिल रहा है। एक कामकाजी समाधान के लिए – JDB

3

उत्तर जो आप चाहते हैं वह ठीक करेगा @"(?=\[\[.*?\]\])|(?<=\]\])"

इसमें इसके दो भाग हैं, | "या" प्रतीक से अलग हैं।

(?=\[\[.*?\]\]) किसी भी प्रतीक है जो तुरंत एक [[ कुछ अक्षर, और एक ]], और विभाजन यह inbetween और [ द्वारा पीछा किया जाता के लिए दिखेगा।

(?<=\]\])]] से पहले किसी भी प्रतीक की तलाश करेगा और ] के ठीक बाद विभाजित होगा।

इन्हें "लुकहेड" और "लुकहेइंड" कहा जाता है, और आप here के अधिक रूपों को पा सकते हैं।

+0

+1 हालांकि मुझे लगता है कि इस स्थिति में उपयोग करने के लिए अधिक प्रासंगिक नाम "शून्य चौड़ाई वाला दावा" है। – JDB

+0

@ साइबोर्गक्स 37 - मैंने पहले कभी यह शब्द नहीं सुना होगा। जानना अच्छा है कि इसके लिए एक आधिकारिक शब्द है! – Bobson