牛客刷题 | HJ71 字符串通配符

HJ71 字符串通配符

题目链接

通过这道题,学习了正则表达式的用法。

参考资料:
题解 | #字符串通配符#
Python编程中的re.findall
python字符串与文本处理技巧(2)

正则表达式:一种文本模式,用于描述和匹配一系列符合某个模式(规则)的文本。由普通字符(例如字母和数字)以及特殊字符(称为元字符)组成。正则表达式可以用来检索、替换或提取文本中符合某个模式的子串。

re.findall函数可以根据正则表达式,在指定的字符串中搜索满足条件的子字符串,并返回一个列表,其中包含所有匹配到的子字符串。用法如下:

re.findall(pattern, string, flags=0)

可接受三个参数,其中pattern和string是必需的,而flags可选。函数返回一个列表,其中包含了与正则表达式匹配的所有子串。
pattern:正则表达式的模式或模式字符串。
string:要搜索的字符串。
flags:可选参数,用于控制正则表达式的匹配方式,如‘flags = re.IGNORECASE‘ 表示匹配时忽略大小写。

对于这道题,我们首先要将a变为模式字符串,即规定好a中的“?”和“*”能匹配到的字符类型。可以用replace函数。 具体用法按如下:

a.replace(‘?’,‘[a-zA-Z0-9]{1}’) 表示对字符串a进行替换,用到正则表达式的语法。在方括号 [ ] 内,‘a-zA-Z’ 表示匹配任何一个小写字母(从’a’到’z’)或大写字母(‘A’到’Z’),‘0-9’ 表示匹配任何一个数字(从0到9)。花括号 {1} 表示前面的字符类正好出现一次。
‘.replace(’*',“[a-zA-Z0-9]*”)'将字符串中的 ‘*’ 替换为任何一个大小写字母或数字,双引号中最后的“* ”在正则表达式中是贪婪匹配,它会匹配尽可能多的字符

(事实上,如果用了flags = re.IGNORECASE,在replace函数中就不需要a-z和A-Z都写出来,选择一种就好,反正都会忽略大小写。)

如果a和b能匹配成功,那么re.findall(a, b, flags = re.IGNORECASE)就会输出一个只包含b的列表(b中经过贪婪匹配,能匹配成模式a的子字符串只有它自己),因此如果b在re.findall(a, b, flags = re.IGNORECASE)中,输出“true”,否则为“false”。

代码

import re

a = input()
b = input()
a = a.replace('?','[a-zA-Z0-9]{1}').replace('*',"[a-zA-Z0-9]*")  # 设置带有通配符的字符串可以匹配的模式字符串
if b in re.findall(a, b, flags = re.IGNORECASE):  # a为模式串,b为要搜索的字符串
    print('true')
else:
    print('false')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值