regex - 正则表达式查找日期字符串
问题描述
我有很多需要查找日期的网站,所有这些网站都有不同的模板,所以我需要一个正则表达式,以下是这些网站上如何显示日期的示例:
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
在我的情况下如何编写正则表达式?
解决方案
您可能必须编写一些自定义表达式,然后使用交替,可能有点类似于:
^[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可视化正则表达式:
推荐阅读
- c++ - Using libcurl in g++
- python - Looking for Words in a List with Similar Letters
- google-play - Create New Release is greyed out in Google Play Console
- ios - Local files not opening on iOS simulator after restart
- flutter - type 'Future
' is not a subtype of type 'Widget' - python - "TypeError: 'type' object is not subscriptable" in a function signature
- c - Copying specific number of characters from a string to another
- python - Random seed not performing as expected
- c++ - 具有不同值的 Rcpp 函数填充矩阵
- ruby-on-rails - sort_by multiple attributes in hash