如何编写正则表达式以匹配种子标题格式?

Kin*_*tor 5 c# regex

我正在尝试匹配并打破一个典型的电视洪流的标题:

MyTV.Show.S09E01.HDTV.XviD
MyTV.Show.S10E02.HDTV.XviD
MyTV.Show.901.HDTV.XviD
MyTV.Show.1102.HDTV.XviD

我试图将这些字符串分成3个捕获组,每个条目:Title,Season,Episode.

我可以轻松处理前2个:

^([a-zA-Z0-9.]*)\.S([0-9]{1,2})E([0-9]{1,2}).*$
Run Code Online (Sandbox Code Playgroud)

然而,第三和第四个证明很难打破季节和插曲.如果我可以倒退,那会更容易.例如,对于"901",如果我可以向后工作,则将第一个数字作为数字编号,在此之前剩余的任何数字是季节数.

有没有人知道如何将这些字符串分解为相关的捕获组?

Nul*_*ion 15

这是我会用的:

(.*?)\.S?(\d{1,2})E?(\d{2})\.(.*)
Run Code Online (Sandbox Code Playgroud)

有捕获组:

1: Name
2: Season
3: Episode
4: The Rest
Run Code Online (Sandbox Code Playgroud)

这是C#中的一些代码(由这篇帖子提供):现场直播

using System;
using System.Text.RegularExpressions;

public class Test
{

    public static void Main()
    {
        string s = @"MyTV.Show.S09E01.HDTV.XviD
            MyTV.Show.S10E02.HDTV.XviD
            MyTV.Show.901.HDTV.XviD
            MyTV.Show.1102.HDTV.XviD";

        Extract(s);

    }

    private static readonly Regex rx = new Regex
        (@"(.*?)\.S?(\d{1,2})E?(\d{2})\.(.*)", RegexOptions.IgnoreCase);

    static void Extract(string text)
    {
        MatchCollection matches = rx.Matches(text);

        foreach (Match match in matches)
        {
            Console.WriteLine("Name: {0}, Season: {1}, Ep: {2}, Stuff: {3}\n",
                match.Groups[1].ToString().Trim(), match.Groups[2], 
                match.Groups[3], match.Groups[4].ToString().Trim());
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

生产:

Name: MyTV.Show, Season: 09, Ep: 01, Stuff: HDTV.XviD
Name: MyTV.Show, Season: 10, Ep: 02, Stuff: HDTV.XviD
Name: MyTV.Show, Season: 9, Ep: 01, Stuff: HDTV.XviD
Name: MyTV.Show, Season: 11, Ep: 02, Stuff: HDTV.XviD
Run Code Online (Sandbox Code Playgroud)


Dav*_*and 2

我见过的几乎所有来自 torrent 的媒体文件都有两位数的剧集。有了这个,你应该能够做到E([0-9]{2}).这一点并让表达式匹配。

我估计 99.9% 的节目都标有两位数的剧集。如果您尝试编写一个脚本来轻松标记自己的节目,我会采用两位数的剧集假设,并手动重命名您遇到的错误标记文件。如果您尝试编写一些供公众使用的东西,您可能需要考虑更多的语法我过去曾见过其他应用程序尝试过这种做法,而且所有应用程序的效果都一般。这是一个可能没有单一解决方案的难题。