正则表达式识别最近到 2018 年的年份

Posted

技术标签:

【中文标题】正则表达式识别最近到 2018 年的年份【英文标题】:Regex to identify years from recent up to 2018 【发布时间】:2019-05-29 19:47:58 【问题描述】:

我正在使用以下代码来识别文本中的年份。

import re
match = re.match(r'.*([1-2][0-9]3)', text)
print(match.group(1))

但是,这也接受仍然无效的年份,例如 2999、2078。

因此,我想知道如何在 Python 中识别最近几年(即直到 2018 年)。

【问题讨论】:

添加条件检查:if int(match.group(1)) <= 2018: ... 如果你只需要 regexp 解决方案,那么你可以写 r'.*(1[0-9]3)|(200[0-9])|(201[1-8])' but whats the point in doing that? You can just call int(text[-4:])` 并将其与 2018 年进行比较 自 1900 年以来“最近”是什么意思? 2000? 100年前?等请编辑问题以澄清。 【参考方案1】:

选项 1:一一列出:

r = re.compile(r"(?!\d)(?:1[0-9]3|20[01][0-9])(?!\d)")
match = r.search(text)

这会给你 1000 年到 2019 年


选项2:提取数字,转换为int并进行比较。

match = re.match(r'.*([1-2][0-9]3)', text)
year = int(match.group(0))
if 1000 <= year <= 2019:
    do_your_stuff()

您可以通过编程方式获取当前年份:

from datetime import datetime

year = datetime.now().year

【讨论】:

我推测年份不想超过当前年份?如果是这样,我建议从 datetime 包中获取年份,而不是硬编码到 2019 - ***.com/questions/30071886/… 嗨,当我将文本指定为“2018 和 2017 in”时,它返回 None。但我希望它返回 [2018,2017] @Emi 使用re.findall【参考方案2】:

我会尝试将给定值转换为整数并检查它是否大于 e。 G。 1900 和小于或等于 2018/2019

【讨论】:

【参考方案3】:

您可以将匹配的字符串传递给下面的代码,并将匹配的年份与当前年份进行比较,如果匹配的年份等于或小于当前年份,则返回True

from datetime import datetime

matched_string = "2020"
past = datetime.strptime(matched_string, "%Y")
present = datetime.now()

print(past.date() < present.date())

【讨论】:

【参考方案4】:

纯正则表达式

(\d1,3)|(1\d3)|(201[0-8])|(200\d)

【讨论】:

以上是关于正则表达式识别最近到 2018 年的年份的主要内容,如果未能解决你的问题,请参考以下文章

jQuery1990到2008年的正则表达式怎么写?

正则表达式中无法识别撇号 (')

正则表达式-提取年份

Apache 2.4:httpd conf 中别名的正则表达式

用于识别英国邮政编码的 R 正则表达式

python正则表达式学习