#代码1
import re
str = input()
pattern = re.compile('\d{4}-\d{1,2}-\d{1,2}')
res = pattern.findall(str)
for i in res:
data = i
year = data[0:4]
month = data[5:7]
day = data[8:10]
month1 = {1, 3, 5, 7, 8, 10, 12}
month2 = {4, 6, 9, 11}
flag = True
if month in month1:
if 1 <= day <= 31:
flag = True
else:
flag = False
elif month in month2:
if 1 <= day <= 30:
flag = True
else:
flag = False
elif month == 2:
if 1 <= day <= 28:
flag = True
else:
flag = False
if flag == True:
print(data)
#代码2
import re
str = input()
pattern = r"\d{4}-\d{2}-\d{2}"
match = re.search(pattern, str)
if match:
print(match.group())
代码1是我的代码,代码2是我同学的代码。图一是我错的地方,图二是我同学错的地方。我是看了根据这两个图投机取巧的写法,我知道这样子判断的话还要更详尽一点,但我觉得我这个思路应该大概也许也没错吧。
pattern = re.compile('\d{4}-\d{1,2}-\d{1,2}')
这里没有转义
pattern = re.compile(r'\d{4}-\d{1,2}-\d{1,2}')
代码1的问题是缩进问题,用findall获取全部匹配后,匹配数据验证不在循环内,代码2也只用search获取了第一个匹配,属于数据缺失