題目描述
問題描述:在計算機中,通配符一種特殊語法,廣泛應用于文件搜索、數據庫、正則表達式等領域。現要求各位實現字符串通配符的算法。
要求:
實現如下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")