HJ71 字符串通配符
摘要
Title: HJ71 字符串通配符
Tag: 正则表达式
Memory Limit: 64 MB
Time Limit: 1000 ms
Powered by:NEFU AB-IN
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
14import 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