首页 > 解决方案 > 正则表达式查找日期字符串

问题描述

我有很多需要查找日期的网站,所有这些网站都有不同的模板,所以我需要一个正则表达式,以下是这些网站上如何显示日期的示例:

Saturday, March 24, 2007
1 JANUARY 2016
31st December 2016
23 Agustus 2019
2012年5月7日 
August 23, 2019

我试图做这样的事情:

re.search(r"((\w+\s\w+(,\s|\s)\w+)|(\w+[0-9]\w))", text)

但是在测试过程中,我得到了这个:

2014 jQuery Foundation
81vy4jRyxBHyxIhY67E

在我的情况下如何编写正则表达式?

标签: regexpython-3.x

解决方案


您可能必须编写一些自定义表达式,然后使用交替,可能有点类似于:

^[A-Z][A-Za-z]+[\s,]*[A-Z][A-Za-z]+[\s,]*\d+[\s,]*\d{4}|\d+[A-Za-z]*[\s,]*[A-Z][A-Za-z]+[\s,]*\d{4}|[A-Z][A-Za-z]*[\s,]*\d+[\s,]*\d{4}|\d{4}\D+\d+\D+\d+\D+$

在某些情况下可能会失败,您可能需要对其进行调整。添加更多边界会更好。


如果您想探索/简化/修改表达式,它已在 regex101.com的右上角面板中进行了说明。如果您愿意,您还可以在此链接中观看它如何与一些示例输入匹配。


测试

import re

regex = r"^[A-Z][A-Za-z]+[\s,]*[A-Z][A-Za-z]+[\s,]*\d+[\s,]*\d{4}|\d+[A-Za-z]*[\s,]*[A-Z][A-Za-z]+[\s,]*\d{4}|[A-Z][A-Za-z]*[\s,]*\d+[\s,]*\d{4}|\d{4}\D+\d+\D+\d+\D+$"

test_str = """
Saturday, March 24, 2007
1 JANUARY 2016
31st December 2016
23 Agustus 2019
2012年5月7日 
August 23, 2019

2014 jQuery Foundation
81vy4jRyxBHyxIhY67E

"""
print(re.findall(regex, test_str, re.M))

输出

['Saturday, March 24, 2007', '1 JANUARY 2016', '31st December 2016', '23 Agustus 2019', '2012年5月7日 ', 'August 23, 2019']

正则表达式电路

jex.im可视化正则表达式:

在此处输入图像描述


推荐阅读