我正在为自己制作小应用程序,我想找到与模式匹配的字符串,但我找不到合适的正则表达式。
Stargate.SG-1.S01E08.iNT.DVDRip.XviD-LOCK.avi
这是我所拥有的字符串的expamle,我只想知道它是否包含S [NUMBER] E [NUMBER]的子字符串,每个数字最多2位数。
你能告诉我一个线索吗?答案 0 :(得分:9)
Here是使用命名组的正则表达式:
S(?<season>\d{1,2})E(?<episode>\d{1,2})
然后,您可以像这样获得命名组(季节和剧集):
string sample = "Stargate.SG-1.S01E08.iNT.DVDRip.XviD-LOCK.avi";
Regex regex = new Regex(@"S(?<season>\d{1,2})E(?<episode>\d{1,2})");
Match match = regex.Match(sample);
if (match.Success)
{
string season = match.Groups["season"].Value;
string episode = match.Groups["episode"].Value;
Console.WriteLine("Season: " + season + ", Episode: " + episode);
}
else
{
Console.WriteLine("No match!");
}
S // match 'S'
( // start of a capture group
?<season> // name of the capture group: season
\d{1,2} // match 1 to 2 digits
) // end of the capture group
E // match 'E'
( // start of a capture group
?<episode> // name of the capture group: episode
\d{1,2} // match 1 to 2 digits
) // end of the capture group
答案 1 :(得分:1)
答案 2 :(得分:0)
答案 3 :(得分:0)
我为S [NUMBER1] E [NUMBER2]提出的正则表达式是
S(\d\d?)E(\d\d?) // (\d\d?) means one or two digit
您可以<matchresult>.group(1)
获得NUMBER1,<matchresult>.group(2)
获得NUMBER2。
答案 4 :(得分:0)
我想提出一个更复杂的正则表达式。我没有“。:-_” 因为我用空格代替了它们
str_replace(
array('.', ':', '-', '_', '(', ')'), ' ',
这是捕获正则表达式,用于将标题划分为标题季节和情节
(.*)\s(?:s?|se)(\d+)\s?(?:e|x|ep)\s?(\d+)
例如达芬奇的恶魔se02ep04及其变体 https://regex101.com/r/UKWzLr/3
我无法覆盖的唯一情况是在季节和数字之间设置间隔,因为如果标题对我不起作用,则字母s或se就会成为一部分。无论如何,我还没有看到这样的情况,但这仍然是一个问题。
编辑: 我设法绕过第二行
$title = $matches[1];
$title = preg_replace('/(\ss|\sse)$/i', '', $title);
这样,如果名称是系列的一部分,我将删除's'和'se'的结尾