匹配模式1和/或模式2

2024-10-03 15:27:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我有多个文件名,要么是电影标题,要么是电视节目中的一集。对于电影标题,我想匹配电影发行的年份,对于一集,我想以S00E00的格式匹配季节和集数。但是,我不知道字符串中是否包含或,有时它可以同时包含季节和情节年份。我也不知道什么是第一位的弦乐,一年或一季和一集。在

我尝试使用以下模式:(\d{4})|S(\d\d)E(\d\d),但是它只返回第一个匹配的。对于字符串2012.S01E02,它返回2012,对于字符串S01E02.2012,它返回S01E02。其余的捕获组是None(我使用的是python3.5)。在

我有一个解决方案,它使用两个单独的匹配,if语句,通常看起来很难看。有没有办法让一个regex模式返回一个包含(year, season, episode)的列表(或元组),而不管字符串中的第一个是什么?在


Tags: 字符串none标题电影文件名格式模式年份
1条回答
网友
1楼 · 发布于 2024-10-03 15:27:43

可以使用以下正则表达式:

.*?(\d{4}).*?(S\d{2}E\d{2}).*?|.*?(S\d{2}E\d{2}).*?(\d{4}).*?|.*?(S\d{2}E\d{2}).*?|.*?(\d{4}).*?
  1. .*?(\d{4}).*?(S(\d\d)E(\d\d)).*?:这将首先匹配年份和剧集编号的组合。在
  2. .*?(S(\d\d)E(\d\d)).*?(\d{4}).*?:这将与相反的顺序匹配
  3. .*?(S(\d\d)E(\d\d)).*?:这将匹配集编号
  4. .*?(\d{4}).*?:这将与年份相匹配。在

如果按此顺序执行正则表达式,则始终会同时获得年份和事件号。在

和13;

和13;

相关问题 更多 >