题目描述
问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
要求:
实现如下2个通配符:
*
:匹配0个或以上的字符(注:能被*和?匹配的字符仅由英文字母和数字0到9组成,下同)?
:匹配1个字符
注意:匹配时不区分大小写。
输入描述
通配符表达式; 一组字符串。
输出描述
返回不区分大小写的匹配结果,匹配成功输出true,匹配失败输出false。
用例1
输入
te*t
te123t
输出
true
说明
“*”转换为[0-9a-z]{0,},正则表达式:te[0-9a-z]{0,}t
匹配说明: “te” + 任意多个字母数字 + “t”,匹配“te123t”。
用例2
输入
**soft
nezhasoft
输出
true
解答
#【注】1.处理连续*;2.字符串转义# 获取输入并将字母转换为小写
import repattern=input().lower()
text=input().lower()# 构造正则表达式
regex="^" # 初始化正则表达式,^表示字符串开始位置
star_seen=False #用于避免重复处理连续*
for c in pattern:if c=='*': # 遇到通配符*if not star_seen:regex += "[0-9a-z]{0,}" # 匹配0个或多个数字/字母的表达式star_seen=True # 设置标志为已处理*elif c=='?':regex += "[0-9a-z]{1}"star_seen = Falseelse: # 普通字符regex += re.escape(c)star_seen = False
regex += "$" # 添加$表示字符串的结束位置#使用正则表达式进行匹配
if re.fullmatch(regex,text):print("true")
else:print("false")