regex - Possible to retrieve an arbitrary unordered set of named groups in one swoop with Python's re module? -


कुछ समस्याओं के लिए यह अति आसान है:

 > gt; & gt; Re.search ('(पी & lt; b & gt; बी।)। * (? पी & lt; i & gt;। I।)', 'Abcdefghijk') .समूहदिखा () {'i': 'हिज', 'बी': 'एबीसी'}  

लेकिन अगर मुझे नहीं पता कि समय से आगे क्या उम्मीद है?

उदाहरण के लिए, मेरे पास एक इनपुट वैरिएबल है जिसमें वर्णों के कुछ अज्ञात ऑर्डर हैं और यह बस ऐसा होता है कि 'बी' 'आई' के बाद आता है। मैं अभी भी 'बी' के लिए समूहों को संदर्भित करने में सक्षम होना चाहता हूं। और मै।' इनपुट क्रम में अपने आदेश के अनुसार मेरे regex का आदेश देने के बिना तो, मुझे लगता है कि मैं ऐसा कुछ कर सकता हूं लेकिन मुझे नहीं पता कि यह संभव है:

 > gt; & gt; Re.search ('(p; l & gt; बी।) | (? पी & lt; i & gt;। I।)', Unknown_order_alphabet_str) .groupdict () {'i': 'hij', 'b': 'abc' } <  

[end update]

मैंने अपने मस्तिष्क को एक झुंड के आसपास खोजा और रैक किया है, लेकिन कोई अच्छी सुराग नहीं पैदा कर सकता है इस कार्यक्षमता का अनुमान नहीं होगा क्योंकि संभवतः एक बार ऐसा करने के लिए एकमात्र तरीका प्रत्येक समूह के लिए एक बार पूरे स्ट्रिंग को स्कैन करना है (जो कि मैं इसके बजाय एक पाश में कर सकता था), लेकिन मैंने सोचा कि मैं देखूंगा कि स्टैकवरफ्लो मस्तिष्क क्या है इसके बारे में कहना था।

आपकी मदद के लिए धन्यवाद, जोश

<पी > आरए पैटर्न में एक ऊर्ध्वाधर पट्टी ("या") का प्रयोग करें, और finditer सभी मेल ऑब्जेक्ट्स ब्याज पाने के लिए: प्रत्येक में groupdict के साथ None < / कोड> उस मैच में शामिल समूहों के मूल्य के रूप में नहीं है, और आप पसंद करते समय डाइक्ट्स को "मर्ज" कर सकते हैं।

उदाहरण के लिए:

  import re def mergedgroupdict (पैटर्न, दस्ट्रिंग): वहाँ = re.compile (pattern) परिणाम = {} मो के लिए there.finditer (thestring): d = mo.groupdict () के लिए d में k: यदि k न परिणाम और d [k] कोई नहीं है: परिणाम [के] = डी [के] रिटर्न परिणाम  

यह एक मर्ज रणनीति का उपयोग करता है जो केवल चुनना है पैटर्न में प्रत्येक नामित समूह के लिए पहला वास्तविक मैच अब उदाहरण के लिए

  & gt; & gt; & gt; मर्ज किए गए ग्रुपडिक्ट ('(पी एंड एलटी; बी & gt; बी।) | (? पी एंड एलटी; i & gt; आई।)', 'एबीसीडीएफघीज') {'आई': 'हैज', 'बी': 'एबीसी'}> & gt ; & gt; मर्ज किए गए ग्रुपदिक्ट ('(पी एंड एलटी; बी & gt; बी।) | (? पी & lt; i & gt; आई।)', 'एबीसीडीएफजीआईजी' [:: - 1]) {'आई': 'जेह', 'बी': ' सीएबी '}  

संभवतः आप चाहें, अगर मैं आपके प्रश्न का सही ढंग से व्याख्या करता हूं।


Comments

Popular posts from this blog

.net - C# List<T>.Find(x=>x.Rectangle.Contains(Point)) FAIL -

iphone - Smoothing a rounded stroke in Core Graphics -

c++ - QtQuick: QQmlApplicationEngine failed to load component qrc:/main.qml:23 Invalid attached object assignment -