用于检查电视节目的正则表达式

时间:2011-11-30 09:18:28

标签: c# regex

我正在寻找一个正则表达式,通过S01E01

中的示例"24.S01E01.DVDRip.XviD-FoV.avi"搜索来检查或者是电视节目或只是电影

所以我

bool check = Regex.IsMatch(filename, "^(*[a-z][A-Z][0-9].){*}S\\d\\dE\\d\\d(*[a-z][A-Z][0-9].){*}")

但它看起来并不像视觉工作室对此非常满意...... 有人有消化吗?

2 个答案:

答案 0 :(得分:3)

快乐下载..

foundMatch = Regex.IsMatch(SubjectString, @"^.*S\d\dE\d\d", RegexOptions.IgnoreCase);

啊,现在我明白了..你想知道为什么你的正则表达式不起作用..好吧..

(*[a-z][A-Z][0-9].)这是错误的。

你不能让量词指向任何东西。这里*贪婪地匹配0到n次没有。错误。

([a-z][A-Z][0-9].)

这意味着匹配a-z中的一个字母,后跟A-Z中的一个字母,后跟0-9之后的一个数字,后跟任何字母。所以你正在寻找aA1#或其他东西。你真正想写的是:\w*匹配[a-zA-Z0-9 _]的0到n倍

{*} 

也错了..尽可能多次匹配{,然后}?请参阅上文,了解您的真正含义。

\\d\\d

也错了。您的意思是匹配一个数字,但您实际搜索的内容是\,后跟字母d

等。我建议你开始阅读一些regex教程。

答案 1 :(得分:3)

;也许有点晚了,但这应该有用。

我有更多可以分享的内容,但这应该足以让你开始。

对于此正则表达式,节目应采用以下格式:
Show.Name.S01E02.Source.Quality.Etc-集团
显示名称 - S01E02 - 我的名字
Show.Name.S01.E03.My.Ep.Name
Show.Name.S01E02E03.Source.Quality.Etc-集团
显示名称 - S01E02-03 - 我的名字
Show.Name.S01.E02.E03

var filename = "";

string Standard = @"^((?<series_name>.+?)[. _-]+)?s(?<season_num>\d+)[. _-]*e(?<ep_num>\d+)(([. _-]*e|-)(?<extra_ep_num>(?!(1080|720)[pi])\d+))*[. _-]*((?<extra_info>.+?)((?<![. _-])-(?<release_group>[^-]+))?)?$";

对于此正则表达式,节目应采用以下格式:
Show.Name.1x01.etc
显示名称 - 1x02
ShowName S01E01

string Fov = @"^((?<series_name>.+?)[\[. _-]+)?(?<season_num>\d+)x(?<ep_num>\d+)(([. _-]*x|-)(?<extra_ep_num>(?!(1080|720)[pi])(?!(?<=x)264)\d+))*[\]. _-]*((?<extra_info>.+?)((?<![. _-])-(?<release_group>[^-]+))?)?$"

var regexStandard = new Regex('insert fov or standard here', RegexOptions.IgnoreCase);

Match episode = regexStandard.Match(filename);

var Showname = episode.Groups["series_name"].Value;
var Season = episode.Groups["season_num"].Value;
var Episode = episode.Groups["ep_num"].Value;

Console.WriteLine(Showname + " " + Season + " " + Episode);

Console.ReadLine();