zoukankan      html  css  js  c++  java
  • python实现 字符串匹配函数

    通配符是 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)
  • 相关阅读:
    Jquery 将表单序列化为Json对象
    Modify the server ports
    iOS开发
    Leetcode_num4_Reverse Integer
    hdu 5443 The Water Problem(长春网络赛——暴力)
    E-R图到数据库表
    iOS音频播放 (三):AudioFileStream 转
    JAVA基础之訪问控制权限(封装)
    多做善事,会得到好报的
    mac 安装软件提示权限不足的解决的方法
  • 原文地址:https://www.cnblogs.com/Lin-Yi/p/7795406.html
Copyright © 2011-2022 走看看