2010-03-08 14 views
233

सरल रेगेक्स प्रश्न के बीच पाठ निकालने के लिए नियमित अभिव्यक्ति।स्क्वायर ब्रैकेट्स

this is a [sample] string with [some] special words. [another one] 

क्या वर्गाकार कोष्ठक में शब्द को निकालने के लिए, यानी नियमित अभिव्यक्ति है: मैं निम्न स्वरूप पर एक स्ट्रिंग है।

sample 
some 
another one 

नोट: मेरे उपयोग के मामले में, ब्रैकेट को घोंसला नहीं किया जा सकता है।

उत्तर

472

आप उपयोग कर सकते हैं निम्नलिखित regex विश्व स्तर पर:

\[(.*?)\] 

स्पष्टीकरण:

  • \[: [ एक मेटा चार और फरार हो जाने की आवश्यकता है आप यह सचमुच मिलान करना चाहते हैं।
  • (.*?): सबकुछ एक गैर लालची तरीके से मेल करें और इसे कैप्चर करें।
  • \]: ] एक मेटा चार और फरार हो जाने की आवश्यकता है आप यह सचमुच मिलान करना चाहते हैं।
+6

'[^]]' का उपयोग करके अन्य उत्तर की विधि गैर-लालची ('?') से तेज है, और रेगेक्स स्वाद के साथ भी काम करती है जो गैर लालची का समर्थन नहीं करती हैं। हालांकि, गैर लालची अच्छा दिखता है। – Ipsquiggle

+0

@Ipsquiggle आप सही सर हैं :) – StErMi

+92

आउटपुट (परिणाम) से '[' ']' को बाहर कैसे निकालें? –

65

यह ठीक से काम करते हैं चाहिए:

\[([^]]+)\] 
+3

मेरे उपयोग के मामले में, ब्रैकेट किए गए टेक्स्ट में नई लाइनें शामिल हो सकती हैं, और यह रेगेक्स काम करता है, जबकि स्वीकृत उत्तर नहीं होता है। – Dave

+1

चरित्र वर्ग [^]] का क्या अर्थ है? यह क्या मेल खाता है? – Richard

+2

@ रिचर्ड,^^ चरित्र वर्ग को अस्वीकार करता है। इसका मतलब है "कोई भी चरित्र जो नहीं है]"। – jasonbar

28

कोष्ठक नेस्ट जा सकता है?

यदि नहीं: \[([^]]+)\] वर्ग कोष्ठक सहित एक आइटम, मेल खाता है। बैकरेफर \1 में आइटम होने वाला आइटम होगा। अपने regex स्वाद lookaround का समर्थन करता है, तो

(?<=\[)[^]]+(?=\]) 

इस का उपयोग केवल कोष्ठक के अंदर आइटम का मिलान करेंगे।

+0

यह केवल पहली घटना –

+0

@ कुनललुखर्जी को चिह्नित करता है: नहीं, रेगेक्स किसी भी समय से मेल खा सकता है। लेकिन कुछ रेगेक्स स्वादों को बार-बार रेगेक्स को लागू करने के लिए स्पष्ट रूप से बताया जाना चाहिए (उदाहरण के लिए, जावास्क्रिप्ट में '/ g' ध्वज का उपयोग करके)। –

1
([[][a-z \s]+[]]) 

से ऊपर वर्ग कोष्ठक [] के भीतर निम्नलिखित explaination दिया

  • पात्रों काम करना चाहिए characte वर्ग जिसका मतलब है कि कम से कम एक पैटर्न charcater वर्गाकार कोष्ठक में उल्लेख किया है से मेल खाना चाहिए परिभाषित करता है

  • \ एक अंतरिक्ष

  • + कम से कम एक का मतलब है निर्दिष्ट करता है पहले वर्णित वर्ण का +।

+0

संवेदनशील मामलों में 'ए-जेड' पैटर्न में जोड़ना चाहिए: '([[] [ए-जेए-जेड \ एस] + []])'; मुझे लगता है कि यह अच्छा तरीका है, जबकि '\ 'रेगेक्स पैटर्न में जो स्ट्रिंग अंक (" और') में परिभाषित करता है और "या" उपयोग में बैकस्लैश हैंडलिंग द्वारा नए शौक को मिलाकर! – MohaMad

36
(?<=\[).+?(?=\]) 

कोष्ठक

बिना सामग्री पर कब्जा होगा (? < = [) - के लिए [

सकारात्मक lookbehind *।? - सामग्री

(के लिए गैर लालची मैच?=]) - के लिए [

संपादित सकारात्मक अग्रदर्शी: नेस्टेड कोष्ठक के लिए नीचे regex काम करना चाहिए:

(\[(?:\[??[^\[]*?\])) 
+2

@igaurav मैंने इसे चेक किया है और यह काम करता है। हालांकि यह वातावरण में काम नहीं करेगा जो जावास्क्रिप्ट की तरह दिखने का समर्थन नहीं करता है। शायद यह तुम्हारा मामला है? –

+0

एडम, आपके नेस्टेड ब्रैकेट समाधान विफल होते हैं जब इसमें '.' के साथ स्ट्रिंग होती है ... – patrick

3

इस कोड को वर्ग कोष्ठक के बीच सामग्री निकाल देंगे और कोष्ठकों

(?:(?<=\().+?(?=\))|(?<=\[).+?(?=\])) 

(?: non capturing group 
(?<=\().+?(?=\)) positive lookbehind and lookahead to extract the text between parentheses 
| or 
(?<=\[).+?(?=\]) positive lookbehind and lookahead to extract the text between square brackets 
6

(?<=\().*?(?=\)) काम करता है ऊपर दिए गए स्पष्टीकरण के अनुसार अच्छा है। यहां एक पायथन उदाहरण है:

import re 
str = "Pagination.go('formPagination_bottom',2,'Page',true,'1',null,'2013')" 
re.search('(?<=\().*?(?=\))', str).group() 
"'formPagination_bottom',2,'Page',true,'1',null,'2013'" 
+1

आपको हमेशा दिखाई देने वाले रेगेक्स के लिए कोड स्वरूपण का उपयोग करना चाहिए। यदि रेगेक्स कोड ब्लॉक की बजाय टेक्स्ट में है, तो आप उन्हें प्रारूपित करने के लिए बैकटिक्स का उपयोग कर सकते हैं। ([रेफरी] (http://stackoverflow.com/editing-help#comment-formatting)) –

+0

इसके अलावा, प्रश्न वर्ग ब्रैकेट ('[]') के बारे में था, ब्रांड्स नहीं। –

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