मेरी इस तरह एक नियमित अभिव्यक्ति है:
regexp = u'ba[r|z|d]'
फ़ंक्शन सही होना चाहिए यदि शब्द में बार , बाज या ख़राब है । संक्षेप में, मुझे पायथन के लिए regexp एनालॉग की आवश्यकता है
'any-string' in 'text'
मैं इसे कैसे महसूस कर सकता हूं? धन्यवाद!
मेरी इस तरह एक नियमित अभिव्यक्ति है:
regexp = u'ba[r|z|d]'
फ़ंक्शन सही होना चाहिए यदि शब्द में बार , बाज या ख़राब है । संक्षेप में, मुझे पायथन के लिए regexp एनालॉग की आवश्यकता है
'any-string' in 'text'
मैं इसे कैसे महसूस कर सकता हूं? धन्यवाद!
जवाबों:
import re
word = 'fubar'
regexp = re.compile(r'ba[rzd]')
if regexp.search(word):
print 'matched'
xyz) की खोज करना चाहता हूं और यह जानना चाहता हूं कि ऐसा करने का अधिक कुशल तरीका क्या है, क्या मुझे अजगर का उपयोग करना चाहिए 'xyz' in given_textया उपयोग करना चाहिए re.compile(r'xyz').search(given_text)?
[]कोष्ठक, एक चरित्र क्लास तो अपने फिर से भी मेल खाता है: >>> शब्द = 'बा |'; regexp.search (शब्द) <_sre.SRE_Match ऑब्जेक्ट 0x101030b28> पर। आप सभी पाइप प्रतीकों को छोड़ सकते हैं।
अब तक का सबसे अच्छा है
bool(re.search('ba[rzd]', 'foobarrrr'))
सच्चा लौटाता है
bool। ओपी: " Trueयदि शब्द बार, बाज या खराब है तो वापस लौटना चाहिए ।" अन्य उत्तर व्यवहार का उपयोग करते हैं if- अभिव्यक्ति को उसके दाईं ओर अभिव्यक्ति को परिवर्तित करना bool। उदा import re; rgx=re.compile(r'ba[rzd]'); rgx.search('foobar')=> <re.Match object; span=(2, 5), match='bar'>, लेकिन if(rgx.search(w)): print('y')=> y। ऑटो-कन्वर्ट के प्रलेखन के सबसे करीब से मैं ( संग्रहीत ) मिल सकता था
Matchऑब्जेक्ट हमेशा सत्य होते हैं, और Noneयदि कोई मिलान नहीं है, तो उसे लौटा दिया जाता है। सिर्फ ट्रूनेस के लिए टेस्ट करें।
कोड:
>>> st = 'bar'
>>> m = re.match(r"ba[r|z|d]",st)
>>> if m:
... m.group(0)
...
'bar'
आउटपुट = bar
अगर आप searchकार्यक्षमता चाहते हैं
>>> st = "bar"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m is not None:
... m.group(0)
...
'bar'
और अगर regexpनहीं मिला
>>> st = "hello"
>>> m = re.search(r"ba[r|z|d]",st)
>>> if m:
... m.group(0)
... else:
... print "no match"
...
no match
जैसा कि @bukzor ने उल्लेख किया है कि अगर st = foo barthan match काम नहीं करेगा। तो, इसका उपयोग करने के लिए अधिक उपयुक्त है re.search।
searchइसके बजाय चाहता है match। (देखें docs.python.org/library/re.html#matching-vs-searching। ) इसके अलावा, मुझे लगता है कि यह मददगार होगा यदि आप वास्तविक संभावित तर्कों को सही क्रम में दिखाते हैं, बजाय केवल ...।
stजाते हैं "foo bar", तो मैच विधि यहां काम नहीं करेगी। तुम खोज चाहते हो।
inऔर खोजने में जटिलता अंतर है regex?
यहाँ एक फ़ंक्शन है जो आप चाहते हैं:
import re
def is_match(regex, text):
pattern = re.compile(regex, text)
return pattern.search(text) is not None
नियमित अभिव्यक्ति खोज विधि सफलता पर एक वस्तु लौटाती है और यदि स्ट्रिंग में पैटर्न नहीं मिलता है तो कोई भी। इस बात को ध्यान में रखते हुए, हम सत्य को तब तक वापस करते हैं जब तक कि खोज हमें कुछ वापस दे देती है।
उदाहरण:
>>> is_match('ba[rzd]', 'foobar')
True
>>> is_match('ba[zrd]', 'foobaz')
True
>>> is_match('ba[zrd]', 'foobad')
True
>>> is_match('ba[zrd]', 'foobam')
False
आप ऐसा कुछ कर सकते हैं:
यदि आपकी खोज स्ट्रिंग से मेल खाती है, तो खोज का उपयोग SRE_match ऑब्जेक्ट लौटाएगा।
>>> import re
>>> m = re.search(u'ba[r|z|d]', 'bar')
>>> m
<_sre.SRE_Match object at 0x02027288>
>>> m.group()
'bar'
>>> n = re.search(u'ba[r|z|d]', 'bas')
>>> n.group()
यदि नहीं, तो यह कोई नहीं लौटेगा
Traceback (most recent call last):
File "<pyshell#17>", line 1, in <module>
n.group()
AttributeError: 'NoneType' object has no attribute 'group'
और बस इसे फिर से प्रदर्शित करने के लिए प्रिंट करें:
>>> print n
None
bool(re.search('ba[rzd]', 'sometext'))।