检查日期格式是否包含年或月



我可以有一个日期字符串,例如:

4.3.2009 (my output is 'day' because user meant a day)
3.2009 (my output is 'month' because user meant March)
4/3/2009 (same - output is day)
4-2009 ( output is month)

我正在使用dateutil来解析字符串,但无法检查格式。我只需要知道类型,不管它是'month''M'还是其他输出。我知道我可以用datetime.strftime(string,format)询问格式,但这无济于事。

对于多样性匹配,可以使用正则表达式re

(d{1,2}D+?)?(d{1,2}D+?d{4})

当匹配成功且组1中有值时,表示day;当匹配成功而组1没有值时,则表示month

import re
dates_str = ['4.3.2009', '3.2009', '4/3/2009', '4-2009']
regex = re.compile(r"(d{1,2}D+?)?(d{1,2}D+?d{4})")

def func(v):
res = regex.match(v)
if res:
if all(res.groups()):
return "day"
else:
return "month"
return ""

for date_str in dates_str:
print(func(date_str))

输出:

day
month
day
month

只需将日期字符串拆分如下即可:

dates = ['4.3.2009', '3.2009', '4/3/2009', '4-2009']
def check(date):
for c in date:
if not c.isdigit():
t = date.split(c)
if len(t) == 2:
return 'month'
if len(t) == 3:
return 'day'
break
return None
for date in dates:
print(check(date))

输出:

day
month
day
month

注意:

如果输入字符串不包含看起来像日期的内容,check((函数将返回None。它不会验证给定的字符串。例如,"99-99-99"将返回"day"。您可以扩展该函数,以基于已识别的分隔符构建strptime格式字符串

最新更新