如何使用regx从字符串获取日期和时间?

时间:2018-08-03 16:52:55

标签: regex python-3.6

我需要从ftp获取文件更新时间,为此,我正在使用正则表达式从以下字符串获取日期和时间-

'-rw-r--r--    1 sedangston sedangston   57087764 Aug  2 13:37 products.csv'

我用来获取日期和时间的正则表达式代码如下-

ftp_updated_time = re.findall('[a-zA-Z ]+(?=\s\d ) +\s\d+:\d+', item)[0]

但是我从上面的代码中得到了FTP:list out of index error

有人可以从我上面提到的字符串中更正我的regx以获得日期和时间(8月2日13:37)吗?

请注意,上面的字符串中,Aug和2之间有两个空格。

3 个答案:

答案 0 :(得分:2)

您可以如下组合re.subre.findall

date = re.findall(r'[A-Z][a-z]{2}\s\d\s+\d{2}:\d{2}',re.sub(r'(\s)\s+(?=\d\s\d{2}:\d{2})',r'\1',str))

re.sub删除了多余的空格,re.findall找到了日期。

>>print(date)
['Aug 2 13:37']

您可以看到re.sub模式如何运作here。 您可以检查re.findall模式如何运行here

答案 1 :(得分:0)

如果是引起问题的正则表达式,则[a-zA-z]{3} \d{1,2} \d\d:\d\d应该有效。

答案 2 :(得分:0)

有了日期,就可以通过calendar模块,正则表达式和datetime来进行验证并确定位置信息:

import calendar
import datetime as dt
import re 

def get_date(s):
    months=list(calendar.month_abbr)  # ['','Jan','Feb'...] for the location
    pat=re.compile(r'(\b({})[ \t]+(\d{{1,2}})[ \t]+(\d\d:\d\d)\b)'.format(r'|'.join(months[1:])))
    m=pat.search(s)
    if m and dt.datetime.strptime('{}\t{}\t{}'.format(m.group(2),m.group(3),m.group(4)),'%b\t%d\t%H:%M'):
        return m.group(1)
    else:
        return None