यहाँ यह है:पुनः मॉड्यूल में समूह और समूह के बीच क्या अंतर है?
import re
>>>s = 'abc -j k -l m'
>>>m = re.search('-\w+ \w+', s)
>>>m.groups()
()
>>> m.group(0)
'-j k'
क्यों groups()
मुझे कुछ भी नहीं देता है, लेकिन group(0)
कुछ पैदावार? अंतर क्या है?
>>>m = re.search('(-\w+ \w+)+', s)
>>>m.groups()
('-j k',)
क्यों search
नहीं दे सकता:
ऊपर का पालन
कोड के रूप में इस प्रकार है
>>>re.findall('(-\w+ \w+)', s)
['-j k', '-l m', '-n o']
findall
मुझे सभी -\w+ \w+
सबस्ट्रिंग प्राप्त कर सकते हैं, लेकिन इस पर ध्यान है मुझे सब सबस्ट्रिंग्स?
ऊपर का पालन करें फिर
तो s = 'abc -j k -l m -k o
, और
>>>m = re.search(r'(-\w+ \w+)+', s)
>>>m.groups()
('-l m ',) # why just one substring?
>>>m.group(0)
'-j k -l m ' # as I expected
अधिकांश नियमित अभिव्यक्ति स्वादों में मानक व्यवहार * समूह की किसी भी सामग्री को प्रतिस्थापित करना है, जब इसे प्रत्येक पास के लिए अतिरिक्त समूहों को उत्पन्न करने के बजाय एक से अधिक बार कब्जा कर लिया जाता है। यदि आप उन सभी को कैप्चर करना चाहते हैं तो आपको बार-बार खोजना होगा। 're.findall()' आपके मामले में उपयोगी होना चाहिए। – danielkza
@ डैनियलल्ज़ा, लेकिन क्यों 'समूह()' ने मुझे '-l m' '' ''-j k'' क्यों दिया? – Alcott
पुनरावृत्ति का पहला पास '-j k' से मेल खाता है। दूसरा पास तब संग्रहित मैच को एक नए, '-l m' के साथ ओवरराइट करता है। यदि वहां और भी मैचों का पालन किया गया था, तो आखिरी बार संग्रहित किया जाएगा। मैं आपको नहीं बता सका * क्यों * यह व्यवहार मौजूद है, लेकिन यह लगभग सभी नियमित अभिव्यक्ति स्वादों में मौजूद है। यदि आप सभी मैचों को कैप्चर करना चाहते हैं तो आपको पैटर्न को कई बार लागू करना होगा। – danielkza