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

