题解 | #字符串通配符#递归函数/正则式

字符串通配符

https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036

'''
匹配时不区分大小写

'''

'''
# 递归:先对比s1 s2倒1位置的字符,如果可以匹配,则继续前推 对比倒2字符;如果倒1不能匹配,则直接输出false;以此类推
倒1字符==倒1字符: 对比前面所有的字符
? s2字母/数字: 对比前面所有的字符
* : s1对比s2前几个字符 / s1前几个对比s2

递归终点:
                        s1 s2 均为空值      true
s1 s2 均为数字字母       s1短 空 s2长 不空   false
                        s1长 不空 s2短 空   false

s1 * s2 数字字母              s1 * s2 空    true
                        s1 *+数字字母 s2 空 false

'''
'''
s1=input().lower()
s2=input().lower()

def ifmatch(s1,s2):
    
    if s1=='' and s2=='':
        return True
    elif s1=='' and s2!='':
        return False
    elif s1!='' and s2=='':
        if s1.replace('*','')=='':
            return True
        else:
            return False
    else:
        if s1[-1]==s2[-1] or (s1[-1]=='?' and s2.isalnum()):
            return ifmatch(s1[:-1],s2[:-1]) 
        elif s1[-1]=='*':
            return ifmatch(s1,s2[:-1]) or ifmatch(s1[:-1],s2)
        else:
            return False

if ifmatch(s1,s2):
    print('true')
else:
    print('false')
'''
# 正则表达式
import re
while 1:
    try:
        a = input().lower()
        b = input().lower()
        a = a.replace('?','[a-z0-9]{1}').replace('*','[a-z0-9]*')
		# {n}匹配确定的n次;* 匹配0次或多次
        if b in re.findall(a,b):#这题问的是上面一个字符串能不能完全代表下面一个字符串
            print('true')
        else:
            print('false')
    
    except:
        break


全部评论

相关推荐

10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务