Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Python

पायथन में नियमित अभिव्यक्ति मिलान


मान लीजिए कि हमारे पास एक इनपुट स्ट्रिंग s और दूसरी इनपुट स्ट्रिंग p है। यहाँ s मुख्य स्ट्रिंग है और p पैटर्न है। हमें एक विधि को परिभाषित करना होगा, जो स्ट्रिंग में पैटर्न से मेल खा सके। इसलिए हमें इसे रेगुलर एक्सप्रेशन के लिए लागू करना होगा, जो '.' और '*' का समर्थन करता है।

  • डॉट '।' किसी एक वर्ण से मेल खाता है

  • स्टार '*' पिछले तत्व के शून्य या अधिक से मेल खाता है।

तो उदाहरण के लिए, यदि इनपुट s ="aa" और p ="a" जैसा है, तो यह सही होगा, उसी इनपुट स्ट्रिंग के लिए, यदि पैटर ".*" है, तो यह सत्य होगा।

इसे हल करने के लिए, हम इन चरणों का पालन करेंगे -

  • ss:=s और ps का आकार:=p का आकार

  • dp को ss x ps आकार का एक मैट्रिक्स बनाएं, और इसे गलत मान का उपयोग करके भरें

  • इनके पहले एक खाली जगह जोड़कर p और s को अपडेट करें

  • 2 से ps की श्रेणी में i के लिए -

    • dp[0, i] :=dp[0, i - 2] जब p[i] तारा हो, अन्यथा असत्य

  • मेरे लिए 1 से ss की सीमा में

    • j के लिए 1 से ps की सीमा में

      • अगर s[i] p[j] है, या p[j] डॉट है, तो

        • डीपी [आई, जे]:=डीपी [i - 1, जे - 1]

      • अन्यथा जब p[j] तारा है, तब

        • डीपी [आई, जे]:=डीपी [आई, जे -2]

        • अगर s[i] p[j – 1] है या p[j – 1] डॉट है, तो

          • dp[i, j] :=अधिकतम dp[i, j] और dp[i – 1, j]

  • वापसी डीपी [एसएस, पीएस]

उदाहरण

आइए बेहतर समझ पाने के लिए निम्नलिखित कार्यान्वयन देखें -

class Solution(object):
   def isMatch(self, s, p):
      ss = len(s)
      ps = len(p)
      dp = [[False for i in range(ps+1)] for j in range(ss+1)]
      p = " "+p
      s = " " + s
      dp[0][0]=True
      for i in range(2,ps+1):
         dp[0][i] = dp[0][i-2] if p[i]=='*'else False
      for i in range(1,ss+1):
         for j in range(1,ps+1):
            if s[i] ==p[j] or p[j]=='.':
               dp[i][j]= dp[i-1][j-1]
            elif p[j] == '*':
               dp[i][j] = dp[i][j-2]
               if s[i] == p[j-1] or p[j-1]=='.':
                  dp[i][j] = max(dp[i][j],dp[i-1][j])
      return dp[ss][ps]
ob = Solution()
print(ob.isMatch("aa", "a."))
print(ob.isMatch("aaaaaa", "a*"))

इनपुट

"aa", "a."
"aaaaaa", "a*"

आउटपुट

True
True

  1. पाइथन में रेगुलर एक्सप्रेशन ग्रुपिंग कैसे काम करती है?

    समूह बनाना हम रेगुलर एक्सप्रेशन के भाग को कोष्ठकों से घेर कर समूहित करते हैं। इस प्रकार हम एक वर्ण के बजाय पूरे समूह में ऑपरेटरों को लागू करते हैं। ग्रुप कैप्चर करना कोष्ठक न केवल उप-अभिव्यक्तियों को समूहित करते हैं बल्कि वे बैकरेफरेंस भी बनाते हैं। रेगुलर एक्सप्रेशन के समूहीकृत भाग से मेल खाने वाल

  1. पायथन में नियमित अभिव्यक्ति संशोधक कैसे काम करते हैं?

    नियमित अभिव्यक्ति शाब्दिक में मिलान के विभिन्न पहलुओं को नियंत्रित करने के लिए एक वैकल्पिक संशोधक शामिल हो सकता है। संशोधक एक वैकल्पिक ध्वज के रूप में निर्दिष्ट हैं। आप अनन्य OR (|) का उपयोग करके कई संशोधक प्रदान कर सकते हैं, और इनमें से किसी एक द्वारा प्रस्तुत किया जा सकता है - निम्नलिखित विभिन्न

  1. पायथन में नियमित अभिव्यक्ति क्या है?

    सरल शब्दों में, रेगुलर एक्सप्रेशन वर्णों का एक क्रम है जिसका उपयोग मुख्य रूप से स्ट्रिंग या फ़ाइल में पैटर्न खोजने और बदलने के लिए किया जाता है। वे अधिकांश प्रोग्रामिंग भाषाओं जैसे पायथन, पर्ल, आर, जावा आदि द्वारा समर्थित हैं। कोड, लॉग फाइल, स्प्रैडशीट, या यहां तक ​​कि दस्तावेज़ जैसे टेक्स्ट से जान