diff --git a/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs b/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs index dbd67d5a7..63abbd75b 100644 --- a/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs +++ b/src/NzbDrone.Core.Test/ParserTests/ParserFixture.cs @@ -35,6 +35,31 @@ namespace NzbDrone.Core.Test.ParserTests result.Should().Be(title.CleanSeriesTitle()); } + [TestCase("Series S03E14 720p HDTV X264-DIMENSION", "Series")] + [TestCase("Series.S03E14.720p.HDTV.X264-DIMENSION", "Series")] + [TestCase("Series-S03E14-720p-HDTV-X264-DIMENSION", "Series")] + [TestCase("Series_S03E14_720p_HDTV_X264-DIMENSION", "Series")] + [TestCase("Series 2022 S03E14 720p HDTV X264-DIMENSION", "Series", 2022)] + [TestCase("Series (2022) S03E14 720p HDTV X264-DIMENSION", "Series", 2022)] + [TestCase("Series.2022.S03E14.720p.HDTV.X264-DIMENSION", "Series", 2022)] + [TestCase("Series-2022-S03E14-720p-HDTV-X264-DIMENSION", "Series", 2022)] + [TestCase("Series_2022_S03E14_720p_HDTV_X264-DIMENSION", "Series", 2022)] + [TestCase("1234 S03E14 720p HDTV X264-DIMENSION", "1234")] + [TestCase("1234.S03E14.720p.HDTV.X264-DIMENSION", "1234")] + [TestCase("1234-S03E14-720p-HDTV-X264-DIMENSION", "1234")] + [TestCase("1234_S03E14_720p_HDTV_X264-DIMENSION", "1234")] + [TestCase("1234 2022 S03E14 720p HDTV X264-DIMENSION", "1234", 2022)] + [TestCase("1234 (2022) S03E14 720p HDTV X264-DIMENSION", "1234", 2022)] + [TestCase("1234.2022.S03E14.720p.HDTV.X264-DIMENSION", "1234", 2022)] + [TestCase("1234-2022-S03E14-720p-HDTV-X264-DIMENSION", "1234", 2022)] + [TestCase("1234_2022_S03E14_720p_HDTV_X264-DIMENSION", "1234", 2022)] + public void should_parse_series_title_info(string postTitle, string titleWithoutYear, int year = 0) + { + var seriesTitleInfo = Parser.Parser.ParseTitle(postTitle).SeriesTitleInfo; + seriesTitleInfo.TitleWithoutYear.Should().Be(titleWithoutYear); + seriesTitleInfo.Year.Should().Be(year); + } + [Test] public void should_remove_accents_from_title() { diff --git a/src/NzbDrone.Core/Parser/Parser.cs b/src/NzbDrone.Core/Parser/Parser.cs index 953a550fc..92cdf5048 100644 --- a/src/NzbDrone.Core/Parser/Parser.cs +++ b/src/NzbDrone.Core/Parser/Parser.cs @@ -455,7 +455,7 @@ namespace NzbDrone.Core.Parser private static readonly Regex LanguageRegex = new Regex(@"(?:\W|_)(?\b(?:ita|italian)\b)|(?german\b|videomann)|(?flemish)|(?greek)|(?(?:\W|_)(?:FR|VOSTFR)(?:\W|_))|(?\brus\b)|(?nl\W?subs?)|(?\b(?:HUNDUB|HUN)\b)|(?\b(?:espaƱol|castellano)\b)", RegexOptions.IgnoreCase | RegexOptions.Compiled); - private static readonly Regex YearInTitleRegex = new Regex(@"^(?.+?)(?:\W|_)?(?<year>\d{4})", + private static readonly Regex YearInTitleRegex = new Regex(@"^(?<title>.+?)[-_. ]+?\(?(?<year>\d{4})\)?", RegexOptions.IgnoreCase | RegexOptions.Compiled); private static readonly Regex TitleComponentsRegex = new Regex(@"^(?:(?<title>.+?) \((?<title>.+?)\)|(?<title>.+?) \| (?<title>.+?))$",