如何在Python中搜索带有模式"12 Apr 2018"
的字符串,并将其转换为python中的日期对象。
答案 0 :(得分:1)
如果其格式为“2018年4月12日”,那么您最好使用strptime()。如果它被其他页面内容包围,您可能需要使用正则表达式。
datetime.datetime.strptime("12 Apr 2018", "%d %b %Y")
这将返回一个日期时间对象,如下所示
datetime.datetime(2018, 4, 12, 0, 0)
答案 1 :(得分:1)
您可以使用
\b[1-3][0-9]\s+[a-zA-Z]*\s+[1-9][0-9]{3}\b
它基于你的正则表达式,有一些细微的变化。我已使用字边界^$
替换了行标记的开头/结尾(\b
)。我在日期部分之间添加了空格(\s+
),并且我在一天和一年中允许零。
当你拥有它时,你可以像Sam Collins建议的那样使用strptime
。
答案 2 :(得分:0)
假设日期始终采用“(数字日)(3个字母缩写的月份)(4位数年份)”格式,您想要的正则表达式为[0-9]{1,2}(?#any one digit or any two consecutive digits) [a-zA-Z]{3}(?#three letters) [0-9]{4}(?#four digits)
显然,可以省略注释((?#...)
位)。
我还建议使用编译后的正则表达式对象的findall
(或finditer
)而不是search
函数。
要将结果转换为Python日期对象,我建议Sam回答 - time.strptime(result, "%d %b %Y")
- 其中“result
”存储匹配的str。
或者,对于正则表达式,如果您希望它更具体(尽管它可能仍然捕获无效日期,如2月30日),您可以使用([0-2][0-9]|3[01]) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)(?#maybe make this bit case-insensitive, if you want) [0-9]{4}