2011-12-15 7 views
15

मैं ब्रांड्स के अंदर कुछ भी मिलान करना चाहता हूं लेकिन परिणाम को भी कोष्ठक को बाहर करना होगा।सी # रेगेक्स मेलेंट्स के अंदर कुछ भी मैच

उदाहरण:
प्रारंभ (P90W)
ब्रेक (45x)

परिणाम:
990W
45x

टिप्पणी कोष्ठकों के बिना परिणाम।

मैं यह काम करने की कोशिश कर रहा हूं लेकिन कोई फायदा नहीं हुआ मैंने कुछ बदलावों की कोशिश की लेकिन मुझे पता है कि यह एक साधारण बात है जिसे मैं याद कर रहा हूं और मैं इसे प्राप्त करने के लिए प्रतिस्थापन का उपयोग नहीं करना चाहता हूं।

var item = "Brake(45X)" 
Regex searchTerm = new Regex(@"\((.*)\)"); 
var value = (searchTerm.Match(item).Groups.Count > 0) ? 
    searchTerm.Match(item).Groups[0].Value : string.Empty; 
+0

मैं नहीं जानता कि सी #, लेकिन है एक 'नया Regex() 'ग्रहण बेसिक, विस्तारित, या preg होने के लिए? क्या आपने बैकस्लेश से बचने वाले ब्रैकेट के सेट को स्विच करने का प्रयास किया है? शायद '\ (' मतलब "श्रेणी की शुरूआत" और '(' एक शाब्दिक माता पिता है? – ghoti

+0

यह मुझे ठीक लग रहा है, क्या हो रहा है? 'मूल्य'' string.Empty' है? –

+0

मान वापस आ रहा है (P90W) या (45 एक्स) कोष्ठक के साथ। –

उत्तर

27

कुछ लोग मुझसे शून्य चौड़ाई दावे हर समय का उपयोग करने का आरोप लगा:

resultString = Regex.Match(subjectString, @"(?<=\().+?(?=\))").Value; 

लेकिन वे आप वास्तव में क्या चाहते हैं। उस पर कब्जा न करें जिसे आप कैप्चर नहीं करना चाहते हैं।

+5

आपको लुकहेड की आवश्यकता क्यों है और देखो? '@ "\ (([^ \)] *) \) "' बहुत आसान है, और 4 अक्षर छोटे हैं :) – kol

+0

यह बहुत अच्छा है, कोल की टिप्पणी भी अच्छी है, लेकिन मैं कहूंगा कि असफल डेव के जवाब ने मुझे कुछ ऐसा करने के लिए सिखाया जो मुझे पहले नहीं पता था – Feign

0
Regex searchTerm = new Regex(@"\(([^\)]*)\)"); 
10

कोशिश regex @"\((.*?)\)"

संपादित करें: इसके अलावा परिणाम समूह 1 नहीं 0 हो जाएगा, समूह 0 पूरे regex परिणाम होने चाहिए, न पहले parenthesized मूल्य

+0

उपयोगी! मुझे घुंघराले ब्रैकेट के अंदर सभी स्ट्रिंग पार्ट्स खोजने की ज़रूरत है, इसलिए इस सरल कोड का उपयोग किया गया: स्ट्रिंग पैटर्न = @ "{(। *?)}" मैचकोलेक्शन मैचों = Regex.Matchches (पाठ, पैटर्न); – Pisu

3

भीतरी निकालें paranthesis और पुनः प्रयास करें:

new Regex(@"(\([^\)]+\))"); 

जब आप परांथेसी से बच नहीं जाते रेगेक्स में, यदि आप समूह मिलान का उपयोग कर रहे हैं तो यह केवल सामग्री को पैराथेसिस के भीतर वापस कर देगा। तो यदि आपके पास है, new Regex(@'(a)(b))', मैच 1 होगा और मैच 2 बी होगा। मैच 0 पूरा मैच है।

+0

एक टिप्पणी, यदि आप बहुत खाली पैराथेसिस चाहते हैं: (\ ([^ \)] * \)) – Dani

0

इस प्रयास करें:

var pattern = @".*public.*(.*\(.*\))"; 
Regex.Matches(input,pattern)