正则表达式合法日期的处理

img

img

img


#代码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获取了第一个匹配,属于数据缺失