正则表达式识别最近到 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 年的年份的主要内容,如果未能解决你的问题,请参考以下文章