通配符是 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)