Python regex对于日期和数字,请查找日期窗体

2024-09-30 00:33:45 发布

您现在位置:Python中文网/ 问答频道 /正文

如何在python3中使用regex单独从文本文件中提取日期?你知道吗

以下是我目前的代码:

import datetime
from datetime import date
import re
s = "birthday on 20/12/2018 and wedding aniversry on 04/01/1997 and dob is on 
09/07/1897"
match = re.search(r'\d{2}/\d{2}/\d{4}', s)
date = datetime.datetime.strptime(match.group(), '%Y-%m-%d').date()
print (date)

预期输出为

20/12/2018
04/01/1997
09/07/1897

Tags: and代码fromimportredatetimedateon
2条回答

你做的一切都对除了这条线

date = datetime.datetime.strptime(match.group(), '%d/%m/%Y').date()

您必须给出与您在datetime.strptime中的输入相同的格式。你知道吗

'%Y-%m-%d' >> 2018-12-20
'%d/%m/%Y' >> 20/12/2018

编辑

如果您不是在寻找datetime对象。你可以这样做

results = re.findall(r'\d{2}/\d{2}/\d{4}', s)
print('\n'.join(results))

输出

In [20]: results = re.findall(r'\d{2}/\d{2}/\d{4}', s)

In [21]: print('\n'.join(results))
20/12/2018
04/01/1997
09/07/1897

您在'%Y-%m-%d'附近的日期格式无效,因为它应该是'%d/%m/%Y查看您提供的日期:birthday on 20/12/2018(dd/mm/yyyy)

更改此项

date = datetime.datetime.strptime(match.group(), '%Y-%m-%d').date()

用这个

date = datetime.datetime.strptime(match.group(), '%d/%m/%Y').date()

您的解决方案

import datetime
from datetime import date
import re
s = "birthday on 20/12/2018"
match = re.search(r'\d{2}/\d{2}/\d{4}', s)
date = datetime.datetime.strptime(match.group(), '%d/%m/%Y').date()
print (date)

但是

为什么要惹这么多麻烦?当他们更容易和优雅的方式在那里。你知道吗

使用^{}

import dateutil.parser as dparser
dt_1 = "birthday on 20/12/2018"
print("Date: {}".format(dparser.parse(dt_1,fuzzy=True).date()))

输出

Date: 2018-12-20

编辑:

对于已编辑的问题(现在有多个日期),您可以使用regex提取它们:

import re
s = "birthday on 20/12/2018 and wedding aniversry on 04/01/1997 and dob is on 09/07/1897"
pattern = r'\d{2}/\d{2}/\d{4}'
print("\n".join(re.findall(pattern,s)))

输出

20/12/2018
04/01/1997
09/07/1897

使用dateutil

from dateutil.parser import parse

for s in s.split():
    try:
        print(parse(s))
    except ValueError:
        pass

输出

2018-12-20 00:00:00
1997-04-01 00:00:00
1897-09-07 00:00:00

相关问题 更多 >

    热门问题