You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python正则提取分组时报too many values to unpack错误如何解决

错误原因
  • 捕获组数量不匹配:你当前的正则定义了3个需要捕获的括号组,调用m.groups()会返回包含3个元素的元组,直接赋值给num, anime_name两个变量就会触发解包错误。另外你代码中写的m.groups()[2]是取第三个元素的单个字符串,也无法解包为两个变量,写法本身错误。
  • 正则语法问题:你写的英文正则存在多处语法错误,包括r标识和字符串之间加了空格、正则内部加了大量无意义的空格、规则冗余无法匹配你给出的示例输入。
修正方案

调整正则规则,把不需要提取内容的括号全部改为非捕获组(括号内开头加?:),只保留数字、动漫名两个捕获组即可,同时简化匹配规则适配需求。

修正后的完整代码如下:

import re
from unicodedata import normalize

def name_and_img_identificator(input_text, text):
    input_text = re.sub(r"([^n\u0300-\u036f]|n(?!\u0303(?![\u0300-\u036f])))[\u0300-\u036f]+", r"\1", normalize("NFD", input_text), 0, re.I)
    input_text = normalize( 'NFC', input_text) # -> NFC
    input_text_to_check = input_text.lower() # 全部转为小写

    # 仅保留两个捕获组,分别对应数量、动漫名
    regex_patron_01 = r"\s*(?:tell me the|tell me some|tell me|say|which are the|which are|which animes|which|top)\s*(\d+)\s*(?:anime series|anime)\s*(?:similar to|like)\s*(\w+(?:\s+\w+)*)\s*\??"

    m = re.search(regex_patron_01, input_text_to_check, re.IGNORECASE)

    if m:
        # 现在m.groups()只有两个元素,可正常解包
        num, anime_name = m.groups()
        num = num.strip()
        anime_name = anime_name.strip()
        print(num)
        print(anime_name)

    return text

input_text_str = input("ingrese: ")
text = ""
print(name_and_img_identificator(input_text_str, text))

测试输入Give me the top 8 anime like Gundam即可得到输出:

8
Gundam

如果后续需要支持更多匹配句式,直接在对应的非捕获组中补充匹配规则即可,保持只有两个捕获组就不会出现解包错误。

内容的提问来源于stack exchange,提问作者user15898019

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 09:18:01