zl程序教程

您现在的位置是:首页 >  后端

当前栏目

python实现 字符串匹配函数

Python 实现 函数 字符串 匹配
2023-09-27 14:28:47 时间
通配符是 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)