我需要从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之间有两个空格。
答案 0 :(得分:2)
您可以如下组合re.sub
和re.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']
答案 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