簡體   English   中英

如何編寫正則表達式以匹配種子標題格式?

[英]How can I write a regex to match a torrents title format?

我正在嘗試匹配並打破一個典型的電視洪流的標題:

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}).*$

然而,第三和第四個證明難以打破季節和插曲。 如果我可以倒退,那會更容易。 例如,對於“901”,如果我可以向后工作,則將第一個數字作為數字編號,在此之前剩余的任何數字是季節數。

有沒有人有任何關於如何將這些字符串分解為相關捕獲組的提示?

這是我會用的:

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

有捕獲組:

1: Name
2: Season
3: Episode
4: The Rest

這是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());
        }
    }

}

生產:

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

我見過的幾乎所有來自洪流的媒體文件都有兩位數的劇集。 有了它,你應該能夠做E([0-9]{2}). 而是讓表達式匹配。

我估計99.9%的節目都標有兩位數的劇集。 如果您正在嘗試編寫腳本以輕松標記自己的節目,我會使用兩位數的劇集假設並手動重命名您遇到的錯誤文件。 如果你想寫點東西用於公共消費的,你可能有,你需要考慮很多的語法。 我已經看到過去曾嘗試過其他應用程序,並且所有應用程序都運行良好。 這是一個很難解決的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM