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

Python匹配用户输入多消息模式时第二个模式被跳过问题求助

问题修复说明

核心问题原因

  • 正则规则错误:两个匹配规则里的关键词data、status后加了?修饰符,被标记为可选内容,不符合「必须携带对应关键词」的需求
  • 逻辑执行错误:未判断匹配对象是否为None就直接调用group()方法,只要第一个模式匹配失败,会直接触发AttributeError进入异常分支,完全跳过第二个模式的判断
  • 冗余代码:已提前执行正则搜索存储了匹配结果,后续无需重复调用search()方法

修正后代码

import re

message = input('Enter Your Message?\n')

# 修正正则,去掉关键词后的?,强制要求匹配关键词
trainee_data_pattern = re.compile(r"^data\s?(\d\d)$")
data_match = trainee_data_pattern.search(message)
trainee_status_pattern = re.compile(r"^status\s?(\w+)$")
status_match = trainee_status_pattern.search(message)

try:
    # 先判断匹配对象存在再调用group
    if data_match and data_match.group() == message:
        matched_num = data_match.group(1)
        valid_ids = [11,22,33]
        if int(matched_num) in valid_ids:
            print(f"ID: {matched_num}")
        else:
            print('no data')
    elif status_match and status_match.group() == message:
        matched_status = status_match.group(1)
        valid_status = ['good','bad','refurbished']
        if matched_status in valid_status:
            print(f"the status is {matched_status}")
        else:
            print('no data')
    else:
        # 两个模式都没匹配到直接输出错误
        print('wrong pattern')
except Exception:
    print('wrong pattern')

验证效果

  • 输入data 22:匹配第一个规则,输出 ID: 22
  • 输入status good:匹配第二个规则,输出 the status is good
  • 输入data 133:数字为3位,匹配不到任何规则,输出 wrong pattern

内容的提问来源于stack exchange,提问作者B A C H A S H

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:06:03