2012-11-27 9 views
8

का उपयोग करके प्रतीकात्मक समूह नाम का उपयोग कैसे करें के साथ re.findall() के समतुल्य नियमित अभिव्यक्ति में परिभाषित प्रतीकात्मक समूह नाम का उपयोग करना संभव है?re.findall()

re.match() का उपयोग करना, फिर से वापस आने वाले MatchObject जिस पर समारोह .group('toto') इस्तेमाल किया जा सकता है ... मैं पास कुछ करने के लिए करना चाहते हैं।

import re 
my_str = 'toto=1, bip=xyz, toto=15, bip=abu' 
print re.findall('toto=(?P<toto>\d+)\,\sbip=(?P<bip>\w+)', my_str) 

यह रिटर्न:

[('1', 'xyz'), ('15', 'abu')] 

मैं की तरह कुछ प्राप्त करना चाहते हैं:

[{'toto':'1', 'bip':'xyz'}, {'toto':'15', 'bip':'abu'}] 

वहाँ ऐसा करने के लिए किसी भी सरल तरीका है

यहाँ एक उदाहरण है? मुझे इसे कहीं भी नहीं मिल रहा है ...

उत्तर

9

आप .findall() के साथ ऐसा नहीं कर सकते हैं।

print [m.groupdict() for m in re.finditer('toto=(?P<toto>\d+)\,\sbip=(?P<bip>\w+)', my_str)] 

यह प्रिंट: हालांकि, अगर आप .finditer() साथ एक ही प्रभाव और कुछ सूची समझ जादू को प्राप्त कर सकते

[{'toto': '1', 'bip': 'xyz'}, {'toto': '15', 'bip': 'abu'}] 

तो हम पाश प्रत्येक मैच .finditer() द्वारा उत्पन्न होने वाले हैं और यह .groupdict() परिणाम है ले के ऊपर।

+0

धन्यवाद! यह पूरी तरह से काम करता है और मैं इसे सीधे इटरेटर पर लूप के लिए भी उपयोग कर सकता हूं! –

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