我正在寻找一个正则表达式,通过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].){*}")
但它看起来并不像视觉工作室对此非常满意...... 有人有消化吗?
答案 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();