diff --git a/app/core/meta/metabase.py b/app/core/meta/metabase.py index 6ad44d29a..58011494a 100644 --- a/app/core/meta/metabase.py +++ b/app/core/meta/metabase.py @@ -24,11 +24,11 @@ SUBTITLE_EPISODE_ALL_RE = re.compile( r"([0-9一二三四五六七八九十百零]+)\s*集\s*全|[全共]\s*([0-9一二三四五六七八九十百零]+)\s*[集话話期幕]", re.IGNORECASE, ) -# 01-26Fin / [01-38 END] / 01-24完结 等"数字范围+完结标记"格式,完结标记必须 -# 存在以避免年份范围(如 2019-2020)误识别为集数;Fin/End 后不能紧跟字母数字, -# 避免 Final/Ending 等单词前缀误匹配 +# 结尾分支显式区分有无右方括号,避免可选括号回溯后绕过数字后缀边界 SUBTITLE_EPISODE_RANGE_FIN_RE = re.compile( - r"(? 新名 && 第 <> 集 >> EP+1"] diff --git a/tests/test_rust_accel.py b/tests/test_rust_accel.py index 42b850627..edfc3c3d0 100644 --- a/tests/test_rust_accel.py +++ b/tests/test_rust_accel.py @@ -257,6 +257,23 @@ def test_rust_metainfo_parser_handles_episode_group(): assert result["begin_season"] == 1 +def test_rust_metainfo_parser_handles_subtitle_episode_range_fin(): + """ + Rust MetaInfo 入口应识别副标题中的数字范围完结标记。 + """ + result = rust_accel.parse_metainfo( + "JoJos Bizarre Adventure S01 2012 1080i BluRay x264 FLAC 2.0-AnimeF@ADE", + subtitle="JOJO的奇妙冒险 第一季 / JoJo's Bizarre Adventure [01-26Fin] [简繁字幕]", + options=_metainfo_options(), + ) + + assert result["type"] == MediaType.TV.value + assert result["begin_season"] == 1 + assert result["begin_episode"] == 1 + assert result["end_episode"] == 26 + assert result["total_episode"] == 26 + + def test_rust_metainfo_path_parser_merges_parent_title(): """ Rust MetaInfoPath 入口应在 Rust 内完成父目录标题合并。