@ -301,26 +301,31 @@ namespace NzbDrone.Core.Parser
//Regex to detect whether the title was reversed.
private static readonly Regex ReversedTitleRegex = new Regex ( @"(?:^|[-._ ])(p027|p0801|\d{2,3}E\d{2}S)[-._ ]" , RegexOptions . Compiled ) ;
private static readonly Regex NormalizeRegex = new Regex ( @"((?:\b|_)(?<!^)(a(?!$)|an|the|and|or|of)(?:\b|_))|\W|_" ,
private static readonly RegexReplace NormalizeRegex = new RegexReplace ( @"((?:\b|_)(?<!^)(a(?!$)|an|the|and|or|of)(?:\b|_))|\W|_" ,
string . Empty ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly Regex FileExtensionRegex = new Regex ( @"\.[a-z0-9]{2,4}$" ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly Regex SimpleTitleRegex = new Regex ( @"(?:(480|720|1080|2160)[ip]|[xh][\W_]?26[45]|DD\W?5\W1|[<>?*:|]|848x480|1280x720|1920x1080|3840x2160|4096x2160|(8|10)b(it)?|10-bit)\s*?" ,
private static readonly RegexReplace SimpleTitleRegex = new RegexReplace ( @"(?:(480|720|1080|2160)[ip]|[xh][\W_]?26[45]|DD\W?5\W1|[<>?*:|]|848x480|1280x720|1920x1080|3840x2160|4096x2160|(8|10)b(it)?|10-bit)\s*?" ,
string . Empty ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly Regex WebsitePrefixRegex = new Regex ( @"^\[\s*[a-z]+(\.[a-z]+)+\s*\][- ]*|^www\.[a-z]+\.(?:com|net)[ -]*" ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly RegexReplace WebsitePrefixRegex = new RegexReplace ( @"^\[\s*[a-z]+(\.[a-z]+)+\s*\][- ]*|^www\.[a-z]+\.(?:com|net)[ -]*" ,
string . Empty ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly Regex SixDigitAirDateRegex = new Regex ( @"(?<=[_.-])(?<airdate>(?<!\d)(?<airyear>[1-9]\d{1})(?<airmonth>[0-1][0-9])(?<airday>[0-3][0-9]))(?=[_.-])" ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly Regex CleanReleaseGroupRegex = new Regex ( @"^(.*?[-._ ](S\d+E\d+)[-._ ])|(-(RP|1|NZBGeek|Obfuscated|Scrambled|sample|Pre|postbot|xpost))+$" ,
private static readonly RegexReplace CleanReleaseGroupRegex = new RegexReplace ( @"^(.*?[-._ ](S\d+E\d+)[-._ ])|(-(RP|1|NZBGeek|Obfuscated|Scrambled|sample|Pre|postbot|xpost))+$" ,
string . Empty ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly Regex CleanTorrentSuffixRegex = new Regex ( @"\[(?:ettv|rartv|rarbg|cttv)\]$" ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly RegexReplace CleanTorrentSuffixRegex = new RegexReplace ( @"\[(?:ettv|rartv|rarbg|cttv)\]$" ,
string . Empty ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
private static readonly Regex CleanQualityBracketsRegex = new Regex ( @"\[[a-z0-9 ._-]+\]$" ,
RegexOptions . IgnoreCase | RegexOptions . Compiled ) ;
@ -392,17 +397,20 @@ namespace NzbDrone.Core.Parser
var releaseTitle = RemoveFileExtension ( title ) ;
var simpleTitle = SimpleTitleRegex . Replace ( releaseTitle , string . Empty ) ;
foreach ( var replace in PreSubstitutionRegex )
{
simpleTitle = replace . Replace ( simpleTitle ) ;
if ( replace . TryReplace ( ref releaseTitle ) )
{
Logger . Debug ( "Substituted with " + releaseTitle ) ;
}
}
var simpleTitle = SimpleTitleRegex . Replace ( releaseTitle ) ;
// TODO: Quick fix stripping [url] - prefixes.
simpleTitle = WebsitePrefixRegex . Replace ( simpleTitle , string . Empty ) ;
simpleTitle = WebsitePrefixRegex . Replace ( simpleTitle );
simpleTitle = CleanTorrentSuffixRegex . Replace ( simpleTitle , string . Empty );
simpleTitle = CleanTorrentSuffixRegex . Replace ( simpleTitle );
simpleTitle = CleanQualityBracketsRegex . Replace ( simpleTitle , m = >
{
@ -513,7 +521,7 @@ namespace NzbDrone.Core.Parser
if ( long . TryParse ( title , out number ) )
return title ;
return NormalizeRegex . Replace ( title , string . Empty ). ToLower ( ) . RemoveAccent ( ) ;
return NormalizeRegex . Replace ( title ). ToLower ( ) . RemoveAccent ( ) ;
}
public static string NormalizeEpisodeTitle ( string title )
@ -552,7 +560,12 @@ namespace NzbDrone.Core.Parser
{
title = title . Trim ( ) ;
title = RemoveFileExtension ( title ) ;
title = WebsitePrefixRegex . Replace ( title , "" ) ;
foreach ( var replace in PreSubstitutionRegex )
{
if ( replace . TryReplace ( ref title ) )
break ;
}
title = WebsitePrefixRegex . Replace ( title ) ;
var animeMatch = AnimeReleaseGroupRegex . Match ( title ) ;
@ -561,7 +574,7 @@ namespace NzbDrone.Core.Parser
return animeMatch . Groups [ "subgroup" ] . Value ;
}
title = CleanReleaseGroupRegex . Replace ( title , "" );
title = CleanReleaseGroupRegex . Replace ( title );
var matches = ReleaseGroupRegex . Matches ( title ) ;