gpt4 book ai didi

python - 检查字符串是否有日期,任何格式

转载 作者:IT老高 更新时间:2023-10-28 21:50:46 33 4
gpt4 key购买 nike

如何检查字符串是否可以解析为日期?

  • 1990 年 1 月 19 日
  • 1990 年 1 月 19 日
  • 1990 年 1 月 19 日
  • 1990 年 1 月 19 日
  • 90 年 1 月 19 日
  • 1990
  • 1990 年 1 月
  • 1990 年 1 月

这些都是有效日期。如果对第 3 项和上述最后一项之间缺少空格有任何顾虑,如果需要,可以通过在字母/字符和数字之间自动插入空格来轻松解决。

但首先,基础知识:

我尝试将其放入 if 语句:

if datetime.strptime(item, '%Y') or datetime.strptime(item, '%b %d %y') or datetime.strptime(item, '%b %d %Y')  or datetime.strptime(item, '%B %d %y') or datetime.strptime(item, '%B %d %Y'):

但那是在 try-except block 中,并且不断返回如下内容:

16343 time data 'JUNE1890' does not match format '%Y'

除非它满足if语句中的第一个条件。

为了澄清,我实际上并不需要日期的值 - 我只是想知道它是否是。理想情况下,应该是这样的:

if item is date:
print date
else:
print "Not a date"

有什么办法吗?

最佳答案

parse dateutils.parser中的函数能够将许多日期字符串格式解析为 datetime 对象。

如果你只是想知道一个特定的字符串是否可以代表或包含一个有效的日期,你可以试试下面的简单函数:

from dateutil.parser import parse

def is_date(string, fuzzy=False):
"""
Return whether the string can be interpreted as a date.

:param string: str, string to check for date
:param fuzzy: bool, ignore unknown tokens in string if True
"""
try:
parse(string, fuzzy=fuzzy)
return True

except ValueError:
return False

那么你有:

>>> is_date("1990-12-1")
True
>>> is_date("2005/3")
True
>>> is_date("Jan 19, 1990")
True
>>> is_date("today is 2019-03-27")
False
>>> is_date("today is 2019-03-27", fuzzy=True)
True
>>> is_date("Monday at 12:01am")
True
>>> is_date("xyz_not_a_date")
False
>>> is_date("yesterday")
False

自定义解析

parse 可能会将某些字符串识别为您不想将其视为日期的日期。例如:

  • 解析 "12""1999" 将返回一个代表当前日期的日期时间对象,其中日期和年份替换字符串中的数字

  • "23, 4""23 4" 将被解析为 datetime.datetime(2023, 4, 16, 0, 0 ).

  • "Friday" 将返回最近的 future 星期五的日期。
  • 同样,"August" 对应当前日期,月份更改为 8 月。

另外,parse 无法识别区域设置,因此无法识别除英语以外的语言中的月份或星期几。

使用自定义 parserinfo 可以在一定程度上解决这两个问题。类,它定义了如何识别月份和日期名称:

from dateutil.parser import parserinfo

class CustomParserInfo(parserinfo):

# three months in Spanish for illustration
MONTHS = [("Enero", "Enero"), ("Feb", "Febrero"), ("Marzo", "Marzo")]

然后可以将此类的实例与 parse 一起使用:

>>> parse("Enero 1990")
# ValueError: Unknown string format
>>> parse("Enero 1990", parserinfo=CustomParserInfo())
datetime.datetime(1990, 1, 27, 0, 0)

关于python - 检查字符串是否有日期,任何格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25341945/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com