2009-04-11 12 views
31

मैं वर्तमान में सी # (नवीनतम नेट और विजुअल स्टूडियो 2008) में एक स्ट्रिंग को विभाजित करने की है, ताकि सब कुछ वर्ग कोष्ठकों में है कि निकालते हैं और शेष पाठ त्यागने के लिए कोशिश कर रहा हूँ में अंदर सब कुछ।सी # Regex स्प्लिट - वर्ग कोष्ठक

उदाहरण के लिए: "एच1-रिसेप्टर प्रतिपक्षी [HSA: 3269] [पथ: hsa04080 (3269)]"

इस मामले में, मैं प्राप्त करने में इच्छुक हूँ "HSA: 3269" और " पथ: hsa04080 (3269) "तार की एक सरणी में।

यह कैसे प्राप्त किया जा सकता है?

उत्तर

60

Split तुम यहाँ मदद नहीं करेगा; आपको नियमित अभिव्यक्तियों का उपयोग करने की आवश्यकता है:

// using System.Text.RegularExpressions; 
// pattern = any number of arbitrary characters between square brackets. 
var pattern = @"\[(.*?)\]"; 
var query = "H1-receptor antagonist [HSA:3269] [PATH:hsa04080(3269)]"; 
var matches = Regex.Matches(query, pattern); 

foreach (Match m in matches) { 
    Console.WriteLine(m.Groups[1]); 
} 

आपके परिणाम उत्पन्न करता है।

+3

आप इसे 3.5 में अजीब लगता है कि MatchCollection enumeartor अभी भी वस्तु के रूप में मैच देता है? – chakrit

+3

वैसे भी ... एक बेहतर regex मैच \ किया जा सकता है [([^ \]] *) \] :-) – chakrit

+0

@chakrit इतनी के रूप में सुरक्षित पक्ष पर होना करने के लिए: 1. हाँ, पर इस पश्च संगतता के लिए बदला नहीं जा सकता कारणों। हालांकि वास्तव में एक शर्म की बात है। माइक्रोसॉफ्ट के पास पाइथन 3 की तरह गेंदें होनी चाहिए: सब कुछ पूर्व-2.0 बाहर अच्छे से फेंक दें और ब्रेकिंग चेंज पेश करें। लेकिन ऐसा नहीं होगा ... –

0

इस

string mystr = "Hello my name is {robert} and i live in {florida}"; 

List<string> myvariables = new List<string>(); 
while (mystr.Contains("{")) 
{ 
    myvariable.Add(mystr.Split('{', '}')[1]); 
    mystr = mystr.Replace("{" + mystr.Split('{', '}')[1] + "}", ""); 
}; 

इस तरह से मैं एक सरणी जो रॉबर्ट और फ्लोरिडा में शामिल होंगे होगा की कोशिश करो।

+2

यह कोड मानता है कि ब्रैकेट हमेशा पूरी तरह से मेल खाते हैं (आपके पास '{' से पहले कभी नहीं '} है, और आपके पास कभी भी पंक्ति में दो बार नहीं है। यह भी बहुत अक्षम है क्योंकि यह कई बार स्ट्रिंग को स्ट्रिंग करता है। अन्य उत्तर की तरह रेगेक्स का उपयोग करने के लिए और अधिक कुशल और मजबूत होगा। –

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