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

标签 c# regex regex-lookarounds regex-group

我正在 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”:7201080随后是 p
  • $ - 字符串结尾。

关于c# - 正则表达式匹配具有不同分辨率后缀的剧集标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67960342/

相关文章:

php - 使用 xPath 获取价格(使用大于)

regex - 何时在正则表达式中使用正向查找?

c# - 使用正则表达式匹配连字符后的所有内容

c# - 调试时检查 IEnumerable "stack"?

c# - 如何将复合类型传递给 PL/pgsql 函数?

c# - 为什么 LINQ .Where(predicate).First() 比 .First(predicate) 快?

python - 具有lookbehind的正则表达式无法使用re.match工作

java - 如何提取虚线内的内容

c++ - std::regex - 前瞻断言并不总是有效

c# - 将我的代码隐藏变量放在 NavigateUrl 的 Repeater Control 中