我正在尝试匹配并分解一个典型的电视种子的标题:
我正在尝试将每个条目的这些字符串分成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/