首页 > 解决方案 > 正则表达式:返回包含年份范围的最大字符串数

问题描述

我有以下三个范围,其中包含存储为字符串的年份:

year1 = '2006-07'
year2 = '2006-2007'
year3 = '2020/21'

我想创建一个返回较高年份的函数。对于上述变量,结果如下:

year1 -> 2007
year2 -> 2007
year3 -> 2021

解决这个问题的最有效方法是什么?

标签: pythonregexalgorithmperformance

解决方案


您可以利用 python 中的内置日期解析。唯一的技巧是决定是否使用该格式"%Y",或者"%y"取决于您传递的是两位数年份还是四位数年份。您可以将数字从字符串中提取出来,re.findall()这比这里的 split 简单一些,并且具有使用多个分隔符的优点:

import re
from datetime import datetime

def maxYear(y):
    toFormat = lambda s: "%y" if len(s) == 2 else "%Y"
    years = re.findall(r'\d+', y)
    return max(datetime.strptime(s, toFormat(s)) for s in years).year


maxYear('2006-07')
# 2007
maxYear('2006-2007')
# 2007
maxYear('2020/21')
# 2021

# Edge cases:
maxYear("1999/00")
# 2000

maxYear("1967/68")
# 2068 <- datetime century cuttoff is 1968

maxYear("1967/69")
# 1969

# it's flexible
maxYear('2021:2000:2022:1968:10')
# 2022 

推荐阅读