HJ71 字符串通配符

摘要
Title: HJ71 字符串通配符
Tag: 正则表达式
Memory Limit: 64 MB
Time Limit: 1000 ms

Powered by:NEFU AB-IN

Link

HJ71 字符串通配符

  • 题意

    问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索、数据库、正则表达式等领域。现要求各位实现字符串通配符的算法。
    要求:
    实现如下2个通配符:
    :匹配0个或以上的字符(注:能被和?匹配的字符仅由英文字母和数字0到9组成,下同)
    ?:匹配1个字符
    注意:匹配时不区分大小写。

  • 思路

    正则表达式的运用

    • s1字符串进行替换操作,将其中的点(.)、问号(?)、和星号(*)分别替换为反斜杠+字符(.)、数字或小写字母字符的字符集([0-9a-zA-Z])、和井号(#)
    • 使用正则表达式替换,将连续的井号(#)替换为匹配零个或多个数字或字母字符的正则表达式模式[0-9a-zA-Z]*。这是为了将多个星号替换为一个匹配多个字符的正则表达式
    • if bool(re.fullmatch(s1, s2))::使用re.fullmatch()函数来尝试匹配s1和s2,如果匹配成功,就返回一个匹配对象,这个条件就为真。如果没有匹配,条件为假。
  • 代码

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import re
    while True:
    try:
    s1 = input().lower()
    s2 = input().lower()
    s1 = s1.replace('.', '\.').replace('?', '[0-9a-zA-Z]').replace('*','#')
    s1 = re.sub('#+','[0-9a-zA-Z]*',s1)
    if bool(re.fullmatch(s1, s2)):
    print('true')
    else:
    print('false')
    except:
    break

使用搜索:谷歌必应百度