正则表达式从字符串中提取日期和时间

时间:2019-07-13 13:47:05

标签: python regex

我可以使用哪种正则表达式从字符串中提取日期(dd / mm / yyyy)和时间(hh:mm:ss):

Thu Jun 07 01:13:25 +0000 2018

因此,给定以上字符串,我将检索:

07/Jun/201801:13:25

3 个答案:

答案 0 :(得分:1)

您可以使用电子邮件工具解析日期,然后以所需的格式进行转换:

from email import utils
date = utils.parsedate_to_datetime('Thu Jun 07 01:13:25 +0000 2018')

date.strftime('%d/%b/%Y')
date.strftime('%H:%M:%S')

答案 1 :(得分:1)

使用datetime模块代替复杂的正则表达式。

要解析日期(参考:formatting codes):

>>> s = 'Thu Jun 07 01:13:25 +0000 2018'
>>> from datetime import datetime
>>> d = datetime.strptime(s,'%a %b %d %H:%M:%S %z %Y')
>>> d
datetime.datetime(2018, 6, 7, 1, 13, 25, tzinfo=datetime.timezone.utc)

格式化日期时间对象:

>>> d.strftime('%d/%b/%Y %H:%M:%S')
'07/Jun/2018 01:13:25'

您还可以检索各个日期/时间项,例如:

>>> d.year
2018
>>> d.month
6

答案 2 :(得分:0)

如评论和其他答案中所述。最好的通用方法是使用适当的Python库,但可以按照要求回答您的问题。

import re
test = "Thu Jun 07 01:13:25 +0000 2018"

date_re = re.compile("^(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat)\s+(?P<mon>(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec))\s+(?P<dd>\d{2})\s+(?P<hh>\d{2}):(?P<mm>\d{2}):(?P<ss>\d{2})\s+\+\d{4}\s+(?P<y>\d{4})\s*$")

tokens = date_re.match(test)
fields = tokens.groupdict()
print(f"{tokens['dd']}/{tokens['mon']}/{tokens['y']} {tokens['hh']}:{tokens['mm']}:{tokens['ss']}")

>>> 07/Jun/2018 01:13:25