正则表达式匹配年份YYYY,但最多2020年

时间:2020-06-27 00:03:42

标签: python regex range

我需要在MMM-DD-YYYY中匹配当前年份的生日。但是我坚持处理年份,因为我不确定是否有比单独匹配数字2-0-2-0和如何设置更好的方法来匹配某个范围(例如,直到2020年)年度限制,以至于不会超过2020年。

编辑:这是一项作业,因此我无法使用日期时间或其他库来执行此操作。它必须完全是正则表达式。

WeakEventManager

2 个答案:

答案 0 :(得分:0)

许多人指出,使用正则表达式不一定是最佳选择。但是,作为一项任务,您只能满足要求。

正则表达式有点复杂,特别是如果需要在正则表达式中执行限制检查的话。也就是说,这是我想出的:

pattern ="^(JAN|FEB|MAR|APR|MAY|JUN|JUL|AUG|SEP|OCT|NOV|DEC)-(0?[1-9]|[1-2][0-9]|3[01])-(1\d\d\d|20[01]\d|2020)$"

请注意,您还需要确保-例如-几个月最多可以有31天,这在此处进行了说明。至于这一年,我将范围分为三部分,即我保留了前1000年的时间,您可以进一步轻松地限制这些时间。

不幸的是,这个特定的解决方案仍然使Feb 31st为有效日期。可以构建一个完整的正则表达式,也考虑到这一点,但是比这更难以理解:-)

希望这行得通。

在此处查看其运行情况:https://regex101.com/r/ZNJXTQ/2

答案 1 :(得分:0)

我认为正则表达式可能是这项工作的错误工具。您可以改用datetime.strptime

https://docs.python.org/3/library/datetime.html#datetime.datetime.strptime

import datetime as dt

def is_valid_birthday(date_str):
    dt_format = '%b-%d-%Y'
    try:
        birthday = dt.datetime.strptime(date_str, dt_format).date()
        if birthday > dt.date.today():
            return False
        return True
    except ValueError:
        return False

print(is_valid_birthday('Feb-17-2020'))