[英]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
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.