regex - Python: defining a union of regular expressions -


मेरे पास पैटर्न की एक सूची है

  list_patterns = [': error:', ': चेतावनी:', 'cc1plus:', 'undefine संदर्भ']  

मुझे क्या करना है जो उन सभी के एक संघ का उत्पादन करना है जो प्रत्येक तत्व से मेल खाने वाली एक नियमित अभिव्यक्ति उत्पन्न करता है list_patterns में [लेकिन संभवतः किसी भी सूची से नहीं मेल खाता है - पासवर्ड] -

  re.compile (list_patterns)  

क्या यह संभव है?

ऐसा करने के कुछ तरीके हैं सबसे आसान तरीका है:

  list_patterns = [': त्रुटि:', ': चेतावनी:', 'cc1plus:', 'को संदर्भ को परिभाषित करें'] स्ट्रिंग = 'एक है: त्रुटि: और एक cc1plus: इस स्ट्रिंग में 'print re.findall (' | '.join (list_patterns), स्ट्रिंग)  

आउटपुट:

  [': त्रुटि : ',' Cc1plus: ']  

जो आपके खोज पैटर्न को जोड़ते समय ठीक है, regex को नहीं तोड़ता है (उदाहरण के लिए उनमें से एक में एक रेगॉक्स विशेष कैरेक्टर होता है जैसे ओपनिंग कोष्ठक )। आप इस तरह से संभाल सकते हैं:

  list_patterns = [': त्रुटि:', ': चेतावनी:', 'cc1plus:', 'undefine संदर्भ'] स्ट्रिंग = 'एक है: त्रुटि: और एक cc1plus: इस स्ट्रिंग में 'pattern = "|" .join (re.escape (पी) के लिए list_patterns में पी) प्रिंट re.findall (पैटर्न, स्ट्रिंग)  

आउटपुट एक ही है। लेकिन जो भी करता है वह प्रत्येक कोड को किसी भी रीजेक्स विशेष वर्णों से बचने के लिए re.escape () के माध्यम से पास करता है।

अब जो आप उपयोग करते हैं वह आपकी पैटर्नों की सूची पर निर्भर करता है। क्या वे नियमित अभिव्यक्ति होते हैं और इस प्रकार मान्य मान लिया जा सकता है? यदि हां, तो सबसे पहले संभवतः उपयुक्त होगा। यदि वे स्ट्रिंग हैं, तो दूसरी विधि का उपयोग करें।

पहले के लिए, यह अधिक जटिल हो जाता है, लेकिन क्योंकि कई नियमित अभिव्यक्तियों को जोड़कर आप समूह को बदल सकते हैं और अन्य अनपेक्षित दुष्प्रभाव प्राप्त कर सकते हैं।


Comments