2010-10-22 7 views
56

नियमित अभिव्यक्ति के बारे में थोड़ा और अधिक जानने के प्रयास करते समय, एक ट्यूटोरियल सुझाव दिया है कि आप एक शब्द सीमा मैच के लिए \ b उपयोग कर सकते हैं। हालांकि, पायथन दुभाषिया में निम्नलिखित स्निपेट अपेक्षा के अनुरूप काम नहीं करता है:क्या पाइथन फिर मॉड्यूल शब्द सीमाओं का समर्थन करता है ( b)?

>>> x = 'one two three' 
>>> y = re.search("\btwo\b", x) 

y एक मैच वस्तु किया जाना चाहिए था अगर कुछ भी मिलान किया गया था, लेकिन यह कोई नहीं है। क्या \ b अभिव्यक्ति पायथन में समर्थित नहीं है या क्या मैं इसे गलत उपयोग कर रहा हूं?

किसी भी मदद के लिए धन्यवाद।

+20

यह काम करेगा: 're.search (r" \ btwo \ b ", x)' – Bolo

+4

आप "कच्चे" तारों का उपयोग क्यों नहीं कर रहे हैं? 'आर" \ btwo \ ख "'? –

+0

लोग [अक्सर उलझन में] (http://stackoverflow.com/questions/4213800/is-there-something-like-a-counter-variable-in-regular-expression-replace/4214173#4214173) के बारे में '\ ख हैं '। – tchrist

उत्तर

58

आप

word = 'two' 
re.compile(r'\b%s\b' % word, re.I) 

आउटपुट कोशिश मत करो क्यों:

>>> word = 'two' 
>>> k = re.compile(r'\b%s\b' % word, re.I) 
>>> x = 'one two three' 
>>> y = k.search(x) 
>>> y 
<_sre.SRE_Match object at 0x100418850> 

इसके अलावा, आप अपने कोड में कच्चे तार का उपयोग करना चाहिए उल्लेख करना भूल गया

>>> x = 'one two three' 
>>> y = re.search(r"\btwo\b", x) 
>>> y 
<_sre.SRE_Match object at 0x100418a58> 
>>> 
+0

दिलचस्प, कामकाजी उदाहरण के लिए धन्यवाद। क्या आपके पास कोई अंतर्दृष्टि है कि मैंने जिस विधि को चुना है वह काम नहीं करता है? दो दृष्टिकोण समान होना चाहिए, सिवाय इसके कि आपके दृष्टिकोण में आप केवल एक बार संकलन कर रहे हैं। –

+0

@ डैरेन: मेरा आखिरी उदाहरण देखें जो आपने जो किया है उस पर सुधार करता है। मैंने खोज करने के लिए कच्चे तार प्रदान किए। आपके और बोलो के सुझाव के बाद – pyfunc

+1

आह, ऐसा इसलिए था क्योंकि मैं कच्ची स्ट्रिंग का उपयोग नहीं कर रहा था। धन्यवाद! –

50

यह काम करेंगे : re.search(r"\btwo\b", x)

जब आप अजगर में "\b" लिखते हैं, यह एक एकल चरित्र है: "\x08"। या तो इस तरह बैकस्लैश से बचने:

"\\b" 

या इस तरह एक कच्चे स्ट्रिंग लिखें:

r"\b" 
+2

यह वास्तव में मेरी मदद करता है ... मैं एक पिसपार्क की तरह नियमित अभिव्यक्ति के साथ संघर्ष कर रहा था और यह पता नहीं लगा सका कि क्यों \ b (शब्द सीमा) काम नहीं कर रहा था। धन्यवाद – jb1t

3

अजगर प्रलेखन

https://docs.python.org/2/library/re.html#regular-expression-syntax

\ b

खाली स्ट्रिंग से मेल खाता है, लेकिन केवल एक शब्द की शुरुआत या अंत में। एक शब्द को अल्फान्यूमेरिक या अंडरस्कोर वर्णों के अनुक्रम के रूप में परिभाषित किया जाता है, इसलिए एक शब्द का अंत व्हाइटस्पेस या गैर-अल्फान्यूमेरिक, गैर-अंडरस्कोर वर्ण द्वारा इंगित किया जाता है। ध्यान दें कि औपचारिक रूप से, \ ख एक \ w और एक \ डब्ल्यू चरित्र (या इसके विपरीत) के बीच की सीमा के रूप में परिभाषित किया गया है w, या \ के बीच और स्ट्रिंग की शुरुआत/अंत है, तो वर्ण की सटीक सेट अक्षरांकीय निर्भर करता है नहीं समझा यूनिकोड और LOCALE झंडे के मूल्यों पर। उदाहरण के लिए, आर '\ bfoo \ b' मैचों 'foo', 'foo।', '(Foo)', 'bar foo baz' लेकिन 'foobar' या 'foo3' नहीं। एक वर्ण श्रृंखला के अंदर, \ b पाइथन के स्ट्रिंग अक्षर के साथ संगतता के लिए बैकस्पेस वर्ण का प्रतिनिधित्व करता है।

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