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
相关产品推荐
相关产品推荐

