19-正则表达式匹配

题目:请实现一个函数用来匹配包含'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(含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次。

猜你喜欢

转载自www.cnblogs.com/kingshine007/p/11354117.html