请实现一个函数用来匹配包含'.'和'*'的正则表达式。
模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含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日)
本文介绍了一种使用递归思想实现的正则表达式匹配算法,该算法能处理包含'.'和'*'的复杂模式,其中'.'代表任意字符,'*'表示前一个字符可重复任意次。通过具体实例展示了算法的运行过程。
2174

被折叠的 条评论
为什么被折叠?



