From 3a2f90c5674fc1815a90a925e4f52dc9ed21ad7d Mon Sep 17 00:00:00 2001 From: jxxghp Date: Mon, 13 Jul 2026 18:02:44 +0800 Subject: [PATCH] fix(metainfo): improve regex for episode range recognition with end markers --- app/core/meta/metabase.py | 8 ++++---- tests/test_metainfo.py | 27 +++++++++++++++++++++++++++ tests/test_rust_accel.py | 17 +++++++++++++++++ 3 files changed, 48 insertions(+), 4 deletions(-) diff --git a/app/core/meta/metabase.py b/app/core/meta/metabase.py index 6ad44d29..58011494 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 42b85062..edfc3c3d 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 内完成父目录标题合并。