gpt4 book ai didi

python - 正则表达式匹配字符串中最后一次出现的年份

转载 作者:太空宇宙 更新时间:2023-11-03 14:47:46 51 4
gpt4 key购买 nike

我用以下函数编写了一个 python 脚本,它将包含多个日期的文件名作为输入。

代码

import re
from datetime import datetime

def ExtractReleaseYear(title):
rg = re.compile('.*?([\[\(]?((?:19[0-9]|20[01])[0-9])[\]\)]?)', re.IGNORECASE|re.DOTALL)
match = rg.search(title) # Using non-greedy match on filler
if match:
releaseYear = match.group(1)
try:
if int(releaseYear) >= 1900 and int(releaseYear) <= int(datetime.now().year) and int(releaseYear) <= 2099: # Film between 1900-2099
return releaseYear
except ValueError:
print("ERROR: The film year in the file name could not be converted to an integer for comparison.")
return ""

print(ExtractReleaseYear('2012.(2009).3D.1080p.BRRip.SBS.x264'))
print(ExtractReleaseYear('Into.The.Storm.2012.1080p.WEB-DL.AAC2.0.H264'))
print(ExtractReleaseYear('2001.A.Space.Odyssey.1968.1080p.WEB-DL.AAC2.0.H264'))

输出

Returned: 2012 -- I'd like this to be 2009 (i.e. last occurrence of year in string)

Returned: 2012 -- This is correct! (last occurrence of year is the first one, thus right)

Returned: 2001 -- I'd like this to be 1968 (i.e. last occurrence of year in string)

问题

可以观察到,正则表达式将只针对一年中的第一次出现而不是最后一次出现。这是有问题的,因为有些标题(例如此处包含的标题)以年份开头。

在寻找获取年份最后一次出现的方法后,我找到了像 negative lookahead 这样的资源。 , last occurrence of repeated grouplast 4 digits in URL ,这些都没有让我更接近实现预期的结果。目前没有任何现有问题可以回答这个独特的案例。

预期结果

  • 我想从给定的文件名中提取一年的最后一次出现(而不是第一次出现),并使用上面输出引用中所述的现有定义/函数返回它。虽然我使用过在线正则表达式引用,但我是正则表达式的新手,如果有人向我展示如何实现此过滤器以处理上述文件名,我将不胜感激。伙计们干杯。

最佳答案

根据@kenyanke 的回答,选择 findall() 而不是 search() 将是更好的选择,因为前者会返回所有非重叠的匹配模式。您可以选择最后一个匹配模式作为 releaseYear。这是我用于查找 releaseYear

的正则表达式
rg = re.compile(r'[^a-z](\d{4})[^a-z]', re.IGNORECASE)
match = rg.findall(title)
if match:
releaseYear = match[-1]

上面的正则表达式假设 releaseYear 之前或之后的直接字母是非字母字符。三个字符串的结果(匹配)是

['2009']
['2012']
['1968']

关于python - 正则表达式匹配字符串中最后一次出现的年份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48093977/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com