Python3中的正则表达式

时间:2018-04-11 22:39:09

标签: python regex

如何在Python中搜索带有模式"12 Apr 2018"的字符串,并将其转换为python中的日期对象。

3 个答案:

答案 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

Demo

它基于你的正则表达式,有一些细微的变化。我已使用字边界^$替换了行标记的开头/结尾(\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}