正则表达式匹配具有不同分辨率后缀的剧集标题

RegEx matching on episode titles with different resolution suffixes

我正在尝试捕获节目名称、剧集编号、剧集标题和分辨率如果存在。我的 collection 中的标准 def 剧集没有分辨率后缀。

对于给定的样本:

Show Name - S01E02 - This Is a High-Def Episode Title - 720p
Show Name - S01E03 - This Is a High-Def Episode Title - 1080p
Show Name - S01E04 - This Is a Standard-Def Episode Title
Show Name - S01E05E06 - This Is a High-Def Double Episode Title - 720p

这是我能得到的最接近的 on regex101.com:

(?<show>[\w ]+) - (?<episode>S[0-9]{2}E[0-9]{2}E?[0-9]{0,2}) - (?<title>[\w -]+)(?: - )(?<res>(?:720p)|(?:1080p))

它以适当的分辨率捕获所有那些,但是当我将 ? 添加到最后一个捕获组时——它确实包括标准 def 剧集——标题组吸收了分辨率。我想我需要在标题组中包含一个负面的前瞻,但我不确定如何做到这一点并同时捕获它。是的,剧集标题中可以包含破折号。

感谢任何指点。如果提供代码片段,我正在用 C# 编写我的重命名脚本,如果它有任何不同的话。谢谢

你可以使用

^(?<show>.*?) - (?<episode>S[0-9]{2}E[0-9]{2}(?:E[0-9]{2})?) - (?<title>.*?)(?: - (?<res>(?:720|1080)p))?$

参见regex demo详情:

  • ^ - 字符串的开头 -(?<show>.*?) - 组“显示”:除换行符外的任何零个或多个字符,尽可能少
  • - - 文字 - 文本
  • (?<episode>S[0-9]{2}E[0-9]{2}(?:E[0-9]{2})?) - 组“episode”:S,两个数字,E,两个数字和一个可选组匹配一个或零个出现的 E 和两个位数
  • - - 文字 - 文本
  • (?<title>.*?) - 组“标题”:除换行符外的任何零个或多个字符,尽可能少
  • (?: - (?<res>(?:720|1080)p))? - 一个可选的序列
    • - - 文字 - 文本
    • (?<res>(?:720|1080)p) - 组“res”:7201080 后跟 p
  • $ - 字符串结尾。