2012-08-14 17 views
8

अजगर 2.6.8अजगर regex findall और बहु ​​

s= ''' 
foo 
bar 
baz 
''' 
>>>re.findall(r'^\S*',s,re.MULTILINE) 
['', 'foo', 'bar', 'baz', ''] 
>>>ptrn = re.compile(r'^\S*',re.MULTILINE) 
>>>ptrn.findall(s) 
['', 'foo', 'bar', 'baz', ''] 
>>>ptrn.findall(s,re.MULTILINE) 
['baz', ''] 

क्यों findall में MULTILINE ध्वज का उपयोग कर के बीच एक अंतर है?

उत्तर

15

जब एक regex वस्तु पर findall() विधि बुला, दूसरा पैरामीटर flags तर्क लेकिन pos तर्क (क्योंकि कि पहले से ही जब regex संकलन इस्तेमाल किया गया है), स्ट्रिंग में जो बिंदु पर करने के लिए regex इंजन नहीं बता रही है मिलान शुरू करो।

re.MULTILINE केवल एक पूर्णांक है (जो 8 होता है)।

the docs देखें।

+2

अच्छा दुख। आपने मुझे 30 सेकंड तक हराया और पहले से ही 4 अपवॉट्स थे। मैं कभी भी FGITW नहीं होगा :-) – alan

+0

कभी भी यह जांचने के लिए परेशान नहीं है कि क्या MULTILINE एक ऑब्जेक्ट या int था – kmad

5

क्योंकि findall संकलित ऑब्जेक्ट ptrn विधि विधि MULTILINE पैरामीटर नहीं लेती है। यह position तर्क लेता है।

यहाँ देखें: http://docs.python.org/library/re.html#re.RegexObject.findall

MULTILINE विनिर्देशक केवल प्रयोग किया जाता है जब आप re.compile() फोन जिसके परिणामस्वरूप ptrn वस्तु पहले से ही यह MULTILINE है कि 'जानता है'।

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