通配符是 shell 命令中的重要功能,
? 表示匹配任意 1 个字符,
*表示匹配 0 个或多个字符。
请使用你熟悉的编程语言实现一个字符串匹配函数,
支持 ? 和 * 通配符。如 “a?cd*d” 匹配 “abcdaccd”
1 #coding:utf8
2 '''
3 通配符是 shell 命令中的重要功能, 4 ? 表示匹配任意 1 个字符, 5 *表示匹配 0 个或多个字符。 6 请使用你熟悉的编程语言实现一个字符串匹配函数, 7 支持 ? 和 * 通配符。如 “a?cd*d” 匹配 “abcdaccd” 8 '''
9
10 def solution( re_str,test_str ): 11 # 如果两个字符串相等 就返回True
12 if re_str == test_str : 13 return True 14 # 标记第一个字母
15 r = re_str[0] if re_str != '' else ''
16 t = test_str[0] if test_str !='' else ''
17 # r 不是? 也 不是* 的情况
18 if r != '?' and r != '*' : 19 if r != t : # 如果不想相等就返回False
20 return False 21 else : # 相等 就 删掉第一个单词 递归
22 re_str,test_str = re_str[1:],test_str[1:] 23 return solution( re_str,test_str ) 24 # 如果r是? 相当于匹配一个字符 都删掉一个字符 然后 递归
25 if r == '?' : 26 re_str, test_str = re_str[1:], test_str[1:] 27 return solution(re_str, test_str) 28 # 如果r是* re 是n个* 则返回True
29 if r == '*' and re_str.strip('*') == '' : 30 return True 31 # 否则 就是包含* ,*匹配0个字符或多个字符,所以我们返回 递归 0个匹配 与 1个匹配 的逻辑或
32 return solution(re_str[1:], test_str) or solution(re_str, test_str[1:]) 33
34
35
36 if __name__ == '__main__': 37 re_str = "a?*cd*d*"
38 test = "abcdaccd"
39 res = solution( re_str,test ) 40 print(res)