You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python检测匹配remasterNames的字符串中%s为1984-2023的四位数字?

实现方案

我们可以借助正则表达式来灵活处理格式匹配和年份提取,以下是具体实现步骤和代码:

步骤说明

  • 将原列表中的模板转换为正则表达式,把%s替换为捕获四位数字的分组,同时转义其他特殊字符避免语法冲突
  • 遍历所有正则模式,对目标字符串进行完全匹配
  • 若匹配成功,提取年份(如果有)并校验是否在1984-2023范围内

代码实现

import re

remaster_templates = [
    ' - Remastered',
    ' - %s Remaster',
    ' - %s Remastered',
    ' - Remaster %s',
    ' - Remastered %s',
    ' - Digital Remaster %s',
    ' - %s Digitally Remaster',
    ' - Digital Remastered %s',
    ' - %s Digitally Remastered',
    ' - %s - Remastered'
]

def check_remaster(song_name):
    regex_patterns = []
    for template in remaster_templates:
        if '%s' not in template:
            # 处理无年份的模板
            pattern = re.escape(template)
            regex_patterns.append((pattern, False))
        else:
            # 替换%s为四位数字捕获分组,转义其他字符
            pattern = re.escape(template).replace(r'\%s', r'(\d{4})')
            regex_patterns.append((pattern, True))
    
    for pattern, has_year in regex_patterns:
        match = re.fullmatch(pattern, song_name.strip())
        if match:
            if has_year:
                year = int(match.group(1))
                if 1984 <= year <= 2023:
                    return True, year
                else:
                    return False, None
            else:
                return True, None
    return False, None

# 示例调用
SongName = " - 2023 Remastered"
is_match, year = check_remaster(SongName)
if is_match:
    if year:
        print(f"匹配成功,年份:{year}")
    else:
        print("匹配成功,无年份信息")
else:
    print("未匹配到Remaster格式")

代码细节

  • 使用re.fullmatch()确保字符串完全符合模板格式,避免部分匹配的误判
  • 对无年份的模板(如' - Remastered')单独处理,返回匹配成功但无年份的结果
  • 年份提取后转为整数再进行范围校验,确保是合法的四位数字年份

内容的提问来源于stack exchange,提问作者FlamebladeOmega

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:00:18