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

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


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

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

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

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

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

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

  • dp को आकार ss x ps का मैट्रिक्स बनाएं, और इसे false मान से भरें

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

  • i के लिए range 2 से ps तक −

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

  • i के लिए range 1 से ss तक

    • j के लिए range 1 से ps तक

      • यदि s[i] p[j] है, या p[j] डॉट है, तो

        • dp[i, j] := dp[i - 1, j - 1]

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

        • dp[i, j] := dp[i, j - 2]

        • यदि s[i] p[j - 1] है या p[j - 1] डॉट है, तो

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

  • dp[ss, ps] लौटाएं

उदाहरण

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

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. - पायथन में रेगुलर एक्सप्रेशन क्या है?

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