在python中搜索字符串中的模式

问题:我对
python很新,所以请耐心等待.这是一项家庭作业,我需要一些帮助.

因此,对于matchPat函数,我需要编写一个函数,该函数将接受两个参数str1和str2,并返回一个布尔值,指示str1是否在str2中.但是我必须在str1中使用星号作为通配符. *只能在str1中使用,它将代表我需要忽略的一个或多个字符. matchPat的示例如下:

matchPat(‘a * t * r’,’anteaters’):是的

matchPat(‘a * t * r’,’albatross’):是的

matchPat(‘a * t * r’,’artist’):错误

我当前的matchPat函数可以判断str1的字符是否在str2中,但我真的不知道如何告诉python(使用*作为外卡)来查找’a'(第一个字母)以及之后找到a,跳过下一个0或更多字符,直到找到下一个字母(在示例中为’t’),依此类推.

def matchPat(str1,str2):
    ## str(*)==str(=>1)
    if str1=='':
        return True
    elif str2=='':
        return False
    elif str1[0]==str2[0]:
        return matchPat(str1[2],str2[len(str1)-1])
    else: return True

最佳答案 这里的基本思想是比较str1和str2中的每个字符,如果str1中的char是“*”,则在str2中找到str1中字符旁边的字符.

假设你不打算使用任何函数(除了find(),这可以很容易地实现),这是很难的方法(代码是直截了当但很混乱,我尽可能评论) –

def matchPat(str1, str2):
    index1 = 0
    index2 = 0
    while index1 < len(str1):
        c = str1[index1]
        #Check if the str2 has run it's course.
        if index2 >= len(str2):
            #This needs to be checked,assuming matchPatch("*", "") to be true
            if(len(str2) == 0 and str1 == "*"):
                return True
            return False
        #If c is not "*", then it's normal comparision.
        if c != "*":
            if c != str2[index2]:
                 return False
            index2 += 1
        #If c is "*", then you need to increment str1,
        #search for the next value in str2,
        #and update index2
        else:
            index1 += 1
            if(index1 == len(str1)):
                return True       
            c = str1[index1]
            #Search the character in str2
            i = str2.find(c, index2)
            #If search fails, return False
            if(i == -1):
                return False
            index2 = i + 1
        index1 += 1
    return True

输出 –

print matchPat("abcde", "abcd")
#False
print matchPat("a", "")
#False
print matchPat("", "a")
#True
print matchPat("", "")
#True
print matchPat("abc", "abc")
#True
print matchPat("ab*cd", "abacacd")
#False
print matchPat("ab*cd", "abaascd")
#True
print matchPat ('a*t*r', 'anteater')
#True
print matchPat ('a*t*r', 'albatross')
#True
print matchPat ('a*t*r', 'artist')
#False
点赞