Python正则re.findall匹配多命令模式报错求助
解决命令模式匹配的正则参数错误及实现方案
错误原因
你调用re.findall时参数格式完全错误,该函数的正确签名是re.findall(pattern, string, flags=0),仅接收正则模式、目标字符串和可选的flags参数,你直接把多个命令字符串作为参数传入,导致Python解析参数时抛出类型错误。
修正后的多命令匹配实现
方式1:匹配指定的命令集合
如果只需要匹配/plot、/cmd、/text、/msg这几个命令,可以构建包含这些命令的正则模式,用re.search快速找到第一个匹配的命令:
import re target_str = "/plot banana 24/02/2021 KinoDerToten" # 定义需要匹配的命令列表 target_cmds = ["plot", "cmd", "text", "msg"] # 构建正则表达式:匹配以/开头,后跟指定命令之一的字符串 cmd_pattern = r"/(" + "|".join(target_cmds) + r")" # 查找第一个匹配的命令 match_result = re.search(cmd_pattern, target_str) if match_result: # 获取完整命令(如/plot) full_cmd = match_result.group(0) # 或者只获取命令名(如plot):full_cmd = match_result.group(1) print(full_cmd) else: print("未匹配到指定命令")
方式2:通用匹配所有以/开头的命令
如果需要匹配任意以/开头、后续为字母数字下划线的命令,可以用更通用的正则:
import re target_str = "/plot banana 24/02/2021 KinoDerToten" cmd_pattern = r"/\w+" match_result = re.search(cmd_pattern, target_str) if match_result: print(match_result.group())
扩展:识别命令并执行关联函数
要实现识别命令后自动执行对应函数,可以用字典建立命令与处理函数的映射,同时拆分命令参数:
import re # 定义各命令的处理函数 def handle_plot(args): print(f"执行Plot命令,参数列表:{args}") def handle_cmd(args): print(f"执行Cmd命令,参数列表:{args}") def handle_text(args): print(f"执行Text命令,参数列表:{args}") def handle_msg(args): print(f"执行Msg命令,参数列表:{args}") # 命令与处理函数的映射表 cmd_handler_map = { "/plot": handle_plot, "/cmd": handle_cmd, "/text": handle_text, "/msg": handle_msg } target_str = "/plot banana 24/02/2021 KinoDerToten" # 匹配命令和后续参数的正则模式 full_pattern = r"^(/\w+)\s*(.*)" match_result = re.match(full_pattern, target_str) if match_result: cmd = match_result.group(1) # 拆分参数(按空格分割,自动忽略多余空格) cmd_args = match_result.group(2).strip().split() if cmd in cmd_handler_map: cmd_handler_map[cmd](cmd_args) else: print(f"未知命令:{cmd}")
内容的提问来源于stack exchange,提问作者Marc Kch
相关产品推荐
相关产品推荐

