题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含0次)。
def re_match(string,pattern): if len(string) ==0 and len(pattern)==0: return True if len(string)!=0 and len(pattern)==0 or (len(string)==0 and len(pattern)!=0): return False if len(pattern)>1 and pattern[1] =='*': if pattern[0] == string[0] or (pattern[0]=='.' and len(string)!=0): return re_match(string[1:],pattern[2:]) or re_match(string[1:],pattern) or re_match(string,pattern[2:]) else: return re_match(string,pattern[2:]) if string[0]==pattern[0] or (pattern[0]=='.' and len(string)!=0): return re_match(string[1:],pattern[1:]) return False
注:
采用递归的方式,终止的条件为:如果字符串和模式串同时到达了结尾,则表明匹配,返回True;如果不同时到达,则返回False。
模式串中如果遍历到'.',则递归遍历字符串下一位和模式串下一位;如果遍历'*'就稍复杂些,需要先判断'*'前一位是否与字符串相同,如果不是,模式串直接跳过'*',遍历下一位,如果相同,则要分三种情况递归,'*'匹配1次,匹配多次,匹配0次。