我正在 try catch 节目名称、剧集编号、剧集标题和分辨率(如果存在)。我收藏的标准清晰度剧集没有分辨率后缀。
对于给定的示例:
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))
它捕获了所有具有适当分辨率的内容,但是当我将 ?
添加到最后一个捕获组(其中确实包括标准定义剧集)时,标题组吸收了分辨率。我认为我需要在标题组中包含否定的前瞻,但我不确定如何做到这一点并同时捕获它。是的,剧集标题中可以包含破折号。
任何指示表示赞赏。如果提供代码片段,我会用 C# 编写重命名脚本(如果有任何区别的话)。谢谢。
最佳答案
你可以使用
^(?<show>.*?) - (?<episode>S[0-9]{2}E[0-9]{2}(?:E[0-9]{2})?) - (?<title>.*?)(?: - (?<res>(?:720|1080)p))?$
请参阅regex demo 。 详细信息:
-
^
- 字符串的开头 -(?<show>.*?)
- 组“show”:除换行符之外的任何零个或多个字符,尽可能少 -
-
- 字面量-
文字 -
(?<episode>S[0-9]{2}E[0-9]{2}(?:E[0-9]{2})?)
- 组“剧集”:S
,两位数,E
、两位数字和一个可选组,匹配出现一次或零次的E
和两位数字 -
-
- 字面量-
文字 -
(?<title>.*?)
- 组“标题”:除换行符之外的任何零个或多个字符,尽可能少 -
(?: - (?<res>(?:720|1080)p))?
- 可选序列-
-
- 字面量-
文字 -
(?<res>(?:720|1080)p)
- 组“res”:720
或1080
随后是p
-
-
$
- 字符串结尾。
关于c# - 正则表达式匹配具有不同分辨率后缀的剧集标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67960342/