如何用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
相关产品推荐
相关产品推荐

