如何使用Regex有条件忽略子串并匹配目标内容
解决方案:提取视频核心标识的正则表达式
针对你给出的两个路径字符串,我们可以构建一个精准的正则表达式,将包含作品名+季集/年份的核心子串捕获到Group 1中,同时自动忽略路径前缀、网站标记、画质编码等无关内容。
正则表达式设计思路
我们需要匹配的核心模式是作品名(允许字母、数字、空格、点)+ 标准季集格式(SxxExx),同时跳过路径中所有无关的前缀和后缀内容:
- 用非贪婪匹配
.*?跳过路径开头的无关部分 - 捕获组
()包裹核心内容,确保只提取我们需要的部分 - 季集部分用
S\d{2}E\d{2}匹配两位数字的季号和集号(兼容大部分剧集命名规范)
最终正则表达式
.*?([A-Za-z][A-Za-z0-9 .]*S\d{2}E\d{2})
Python 3 代码示例
import re # 测试字符串 str1 = "Downloads/ Sherlock - Season 03/Sherlock.S03E02.SD.DVD-The.Sign.of.Three.mkv" str2 = "Downloads/[ www.TorrentDay.com ] - Spy .2011.S01E01.HDTV.XviD-W4F/spy.avi" # 正则模式 pattern = r".*?([A-Za-z][A-Za-z0-9 .]*S\d{2}E\d{2})" # 处理第一个字符串 match1 = re.search(pattern, str1) if match1: print("String 1 捕获结果:", match1.group(1)) # 输出: Sherlock.S03E02 # 处理第二个字符串 match2 = re.search(pattern, str2) if match2: print("String 2 捕获结果:", match2.group(1)) # 输出: Spy .2011.S01E01
正则说明
.*?:非贪婪匹配任意字符,直到找到核心内容的起始位置,避免过度匹配[A-Za-z]:确保核心内容以字母开头,过滤路径中的符号、数字前缀[A-Za-z0-9 .]*:匹配作品名的剩余部分,支持包含空格、点、数字的命名(比如Spy .2011)S\d{2}E\d{2}:精准匹配两位数字的季集格式(如S03E02、S01E01)
这个方案可以兼容你给出的两种路径结构,同时具备一定的扩展性,能适配大部分类似的剧集命名规范。
内容的提问来源于stack exchange,提问作者Pointo Senshi
相关产品推荐
相关产品推荐

