मैं इस रेगेक्स 'n't [0-9]+(\.[0-9][0-9]?)?'
के साथ एक वाक्य में सभी "n't" खोजना चाहता हूं। और RegExr में इसका कार्य ठीक है:
लेकिन जब मैं इसे इस कोड के साथ करने की कोशिश करता हूं, तो यह काम नहीं करता है:
txt = "japan isn't 56 country in Europe."
nt = re.findall(r"n't [0-9]+(\.[0-9][0-9]?)?",txt)
print(nt)
2 जवाब
यह आपकी स्क्रिप्ट की एक सूक्ष्म समस्या है, जिसे निम्नलिखित हल करता है:
txt = "japan isn't 56 country in Europe."
nt = re.findall(r"n't [0-9]+(?:\.[0-9][0-9]?)?",txt)
print(nt) # prints ["n't 56"]
आपके re.findall
मूल कॉल में, आप इस पैटर्न का उपयोग कर रहे थे:
n't [0-9]+(\.[0-9][0-9]?)?
इसका अर्थ है कि पहला कैप्चर समूह वैकल्पिक शब्द .123
है। re.findall
API के साथ, यदि आप एक कैप्चर ग्रुप को निर्दिष्ट करते हैं, तो वह वही है जो वापस किया जाएगा। यह देखते हुए कि आपके इनपुट में नहीं यह समूह है, आपकी परिणामी सूची खाली थी। मेरे सही संस्करण में, मैंने ?:
का उपयोग करके कैप्चरिंग ग्रुप निष्क्रिय बनाया। यदि आप किसी भी स्पष्ट कैप्चर समूह को नहीं निर्दिष्ट करते हैं, तो संपूर्ण मिलान पैटर्न वापस आ जाएगा, जो कि आप यहां चाहते हैं।
findall
कोष्ठकों की बात करें तो यह थोड़ा अजीब है। एक बार जब आप उन्हें वहां ले जाते हैं, तो यह केवल उस समूह का परिणाम देता है, पूरे मैच का नहीं। आप कोष्ठकों को गैर-कैप्चर कर सकते हैं:
>>> nt = re.findall(r"n't [0-9]+(?:\.[0-9][0-9]?)?",txt)
>>> print(nt)
["n't 56"]
संबंधित सवाल
नए सवाल
python
पायथन एक बहु-प्रतिमान है, गतिशील रूप से टाइप किया हुआ, बहुउद्देशीय प्रोग्रामिंग भाषा है। यह एक साफ और एक समान वाक्यविन्यास सीखने, समझने और उपयोग करने के लिए त्वरित होने के लिए डिज़ाइन किया गया है। कृपया ध्यान दें कि अजगर 2 आधिकारिक तौर पर 01-01-2020 के समर्थन से बाहर है। फिर भी, संस्करण-विशिष्ट पायथन सवालों के लिए, [अजगर -२.०] या [अजगर -३.x] टैग जोड़ें। पायथन वेरिएंट (जैसे, ज्योथन, PyPy) या लाइब्रेरी (उदा।, पांडस और न्यूमपी) का उपयोग करते समय, कृपया इसे टैग में शामिल करें।