关于python:regex来识别最近到2018年的年份

Regex to identify years from recent up to 2018

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

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

但是,这也接受诸如29992078年等仍然无效的年份。

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


选项1:逐一列出:

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

这将给你1000到2019年的时间

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

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

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

1
2
3
from datetime import datetime

year = datetime.now().year


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

1
2
3
4
5
6
7
from datetime import datetime

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

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


我试着把给定的值转换成一个整数,并检查它是否大于1900和smaller或等于2018/2019。


纯正则表达式

1
(\d{1,3})|(1\d{3})|(201[0-8])|(200\d)