请实现一个函数用来匹配包含'.'和'*'的正则表达式。
模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。
根据符号.
与*
的匹配规则来决定后续操作,这里采用的是递归的思想,从当前的情况根据源串与目标串的匹配情况展开。
class Solution:
def match(self, s, pattern):
if not s and not pattern:
return True
return self.match_core(s, pattern)
def match_core(self, s, pattern):
if not s and not pattern:
return True
if s and not pattern:
return False
if len(pattern) >= 2 and pattern[1] == '*':
if (s and pattern[0] == s[0]) or (pattern[0] == '.' and s):
return self.match_core(s[1:], pattern[2:]) or \
self.match_core(s[1:], pattern) or \
self.match_core(s, pattern[2:])
else:
return self.match_core(s, pattern[2:]) # 不相等,直接忽略
if (s and pattern[0] == s[0]) or (pattern[0] == '.' and s):
return self.match_core(s[1:], pattern[1:]) # 正常情况,依次后移
return False
st = Solution()
s, pattern = '', '.*'
print(st.match(s, pattern))
(最近更新:2019年09月21日)