我正在尝试匹配并分解一个典型的电视种子的标题:



我正在尝试将每个条目的这些字符串分成3个捕获组:标题,季节,情节。

我可以很容易地处理前两个:

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

然而,事实证明第三和第四节很难打破季节和情节。如果我可以退后一步,那会更容易。例如,对于“901”,如果我可以向后工作,那将是第一个到第一个数字作为情节编号,在此之前剩下的所有内容就是季节编号。

有人对我如何将这些字符串分解为相关的捕获组有任何提示吗?

最佳答案

这是我会用的:

(.*?)\.S?(\d{1,2})E?(\d{2})\.(.*)

有捕获组:
1: Name
2: Season
3: Episode
4: The Rest

这是C#中的一些代码(由this post提供):see it live
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());
        }
    }

}

产生:
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

关于c# - 如何编写正则表达式以匹配torrens标题格式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3808705/

10-16 09:03