2010-01-14 13 views
9

मेरे पास एक स्ट्रिंग है "इस पाठ में कुछ है (कोष्ठक के अंदर पाठ)"। इसलिए मैं सी # में नियमित अभिव्यक्तियों का उपयोग करके ब्रांड्स के अंदर पाठ को पुनर्प्राप्त करना चाहता हूं। लेकिन नियमित अभिव्यक्तियों में ब्रांड्स पहले से ही एक आरक्षित चरित्र है। तो इसे कैसे प्राप्त करें?नियमित अभिव्यक्ति पैटर्न में ब्रांड्स का उपयोग

अद्यतन 1

तो पाठ "afasdfas (2009)" के लिए

मैं (.)/s((/d+)) और (.) (\d+) और (.*)/s((/d/d/d/d)) की कोशिश की। उनमें से कोई भी काम नहीं कर रहा है। कोई विचार?

+1

FYI करें, उन सभी फ़ॉरवर्ड स्लैश में अपने regexes हैं बैकस्लाश होने के लिए माना जाता है, यानी, '/ s'' s' होना चाहिए। –

उत्तर

7

आप या तो बैकस्लैश या Regex.Escape() का उपयोग कर सकते हैं।

16
इस तरह

:

// For "This text has some (text inside parenthesis)" 
Regex RegexObj = new Regex(@"\(([^\)]*)\)"); 

// For "afasdfas (2009)" 
Regex RegexObj = new Regex(@"\((\d+)\)"); 

संपादित करें:

@SealedSun, CannibalSmith: बदल दिया है। मैं भी उपयोग करें @ "" लेकिन यह था ग/RegexBuddy से पी: पी

@Gregg: हाँ, यह वास्तव में तेजी से होता है, लेकिन मैं इसे इस तरह के सवालों का जवाब दे के लिए सरल रखना पसंद करते हैं।

+0

+1, '(। *) \ ((\ D {4}) \)' –

+1

मुझे यह पता लगाने के लिए लगा कि दूसरा '' 'regex escape character '\' से बचने के लिए आवश्यक है। मैं हमेशा verbatim तारों में अपनी नियमित अभिव्यक्ति लिखता हूं: '@ "\ ((। *?) \" 'मुझे इसे पढ़ने में आसान लगता है। –

+1

या' Regex RegexObj = नया Regex (@" \ ((। *?) \) ");' – CannibalSmith

4

नियमित अभिव्यक्ति के लिए "विशेष" वाले किसी भी पात्र के लिए, आप उन्हें बैकस्लैश "\" से बच सकते हैं। उदाहरण के लिए:

\([^\)]*\) 

कब्जा होगा अपने उदाहरण स्ट्रिंग में "(कोष्टक अंदर का पाठ)"।

[^\)]* 

सिर्फ "।" से थोड़ा सुरक्षित होना चाहिए। कोष्ठक के भीतर, और भी तेज होना चाहिए।

+1

किसी चरित्र वर्ग के अंदर '' 'से बचने की कोई आवश्यकता नहीं है। –

0

बस अपने पेरेंटेसिस के आसपास \(, \) जोड़ें। उदाहरण के लिए :

(PatternInsideParenthesis)

इस तरह होगा:

\( (PatternInsideParenthesis) \)

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