From fbd797f6cdcf75d394addf31e0af0f74cdf3dbda Mon Sep 17 00:00:00 2001 From: x1ao4 Date: Sun, 10 Aug 2025 01:51:07 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=89=A7=E9=9B=86=E7=BC=96?= =?UTF-8?q?=E5=8F=B7=E6=8F=90=E5=8F=96=E9=80=BB=E8=BE=91=EF=BC=8C=E9=81=BF?= =?UTF-8?q?=E5=85=8D=E8=AF=AF=E6=8F=90=E5=8F=96=204K=20=E4=B8=AD=E7=9A=84?= =?UTF-8?q?=E6=95=B0=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/static/js/sort_file_by_name.js | 2 +- quark_auto_save.py | 61 ++++++++++++++++++------------ 2 files changed, 38 insertions(+), 25 deletions(-) diff --git a/app/static/js/sort_file_by_name.js b/app/static/js/sort_file_by_name.js index d12d214..1aaf4bf 100644 --- a/app/static/js/sort_file_by_name.js +++ b/app/static/js/sort_file_by_name.js @@ -154,7 +154,7 @@ function sortFileByName(file) { const resolution_patterns = [ /\b\d+[pP]\b/g, // 匹配 720p, 1080P, 2160p 等 /\b\d+x\d+\b/g, // 匹配 1920x1080 等 - // 注意:不移除4K/8K,因为剧集匹配规则中有 (\d+)[-_\s]*4[Kk] 模式 + // 注意:不移除4K/8K,避免误删文件名中的4K标识 ]; for (const pattern of resolution_patterns) { diff --git a/quark_auto_save.py b/quark_auto_save.py index b8aa823..136c876 100644 --- a/quark_auto_save.py +++ b/quark_auto_save.py @@ -215,7 +215,7 @@ def sort_file_by_name(file): resolution_patterns = [ r'\b\d+[pP]\b', # 匹配 720p, 1080P, 2160p 等 r'\b\d+x\d+\b', # 匹配 1920x1080 等 - # 注意:不移除4K/8K,因为剧集匹配规则中有 (\d+)[-_\s]*4[Kk] 模式 + # 注意:不移除4K/8K,避免误删文件名中的4K标识 ] for pattern in resolution_patterns: @@ -394,7 +394,7 @@ def extract_episode_number(filename, episode_patterns=None, config_data=None): resolution_patterns = [ r'\b\d+[pP]\b', # 匹配 720p, 1080P, 2160p 等 r'\b\d+x\d+\b', # 匹配 1920x1080 等 - # 注意:不移除4K/8K,因为剧集匹配规则中有 (\d+)[-_\s]*4[Kk] 模式 + # 注意:不移除4K/8K,避免误删文件名中的4K标识 ] for pattern in resolution_patterns: @@ -423,6 +423,41 @@ def extract_episode_number(filename, episode_patterns=None, config_data=None): if match_e: return int(match_e.group(1)) + # 添加中文数字匹配模式(优先匹配) + chinese_patterns = [ + r'第([一二三四五六七八九十百千万零两]+)集', + r'第([一二三四五六七八九十百千万零两]+)期', + r'第([一二三四五六七八九十百千万零两]+)话', + r'([一二三四五六七八九十百千万零两]+)集', + r'([一二三四五六七八九十百千万零两]+)期', + r'([一二三四五六七八九十百千万零两]+)话' + ] + + # 优先匹配中文数字模式 + for pattern_regex in chinese_patterns: + try: + match = re.search(pattern_regex, filename_without_dates) + if match: + chinese_num = match.group(1) + arabic_num = chinese_to_arabic(chinese_num) + if arabic_num is not None: + return arabic_num + except: + continue + + # 智能4K匹配:检查是否匹配到4K模式,但要验证这个匹配是否合理 + match_4k = re.search(r'(\d+)[-_\s]*4[Kk]', filename_without_dates) + if match_4k: + episode_num = int(match_4k.group(1)) + # 检查文件名中是否已经有明确的剧集标识(中文数字或阿拉伯数字) + has_episode_indicator = re.search(r'第[一二三四五六七八九十百千万零两]+[期集话]|第\d+[期集话]', filename_without_dates) + if has_episode_indicator: + # 如果已经有明确的剧集标识,跳过4K匹配,避免冲突 + pass + else: + # 没有明确的剧集标识,4K匹配有效 + return episode_num + # 尝试匹配更多格式(注意:避免匹配季数) default_patterns = [ r'第(\d+)集', @@ -438,16 +473,6 @@ def extract_episode_number(filename, episode_patterns=None, config_data=None): r'_?(\d+)_?' ] - # 添加中文数字匹配模式 - chinese_patterns = [ - r'第([一二三四五六七八九十百千万零两]+)集', - r'第([一二三四五六七八九十百千万零两]+)期', - r'第([一二三四五六七八九十百千万零两]+)话', - r'([一二三四五六七八九十百千万零两]+)集', - r'([一二三四五六七八九十百千万零两]+)期', - r'([一二三四五六七八九十百千万零两]+)话' - ] - patterns = None # 检查传入的episode_patterns参数 @@ -529,18 +554,6 @@ def extract_episode_number(filename, episode_patterns=None, config_data=None): except: continue - # 尝试匹配中文数字模式 - for pattern_regex in chinese_patterns: - try: - match = re.search(pattern_regex, filename_without_dates) - if match: - chinese_num = match.group(1) - arabic_num = chinese_to_arabic(chinese_num) - if arabic_num is not None: - return arabic_num - except: - continue - # 如果文件名是纯数字,且不是日期格式,则可能是剧集号 if filename_without_dates.isdigit() and not is_date_format(filename_without_dates): return int(filename_without_dates)