使用正则表达式匹配字符串中所有的日期信息
匹配年月日日期格式:2018-12-6 (数字第一位不为0)
注意年的范围是1-9999, 月的范围是1-12, 日的范围是1-29或者1-30或者1-31(不考虑闰年)
import re
# 方法一:三种月份分开正则
re_str = r'[1-9]\d{,3}-((2-([1-9]|[12]\d))|(([13578]|1[02])-([1-9]|[12]\d|3[01]))|(([469]|11)-([1-9]|[12]\d|30)))'
print(re.fullmatch(re_str, '1997-11-30'))
# 方法二:三种月份公共日份一起正则,再分别正则30和31日的月份
re_str = r'[1-9]\d{,3}-((([1-9]|1[012])-([1-9]|[12]\d))|(([13578]|1[02])-3[01])|(([469]|11)-3[01]))'
print(re.fullmatch(re_str, '1999-4-31'))