Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中用于命令解析的正则表达式_Python_Regex - Fatal编程技术网

Python中用于命令解析的正则表达式

Python中用于命令解析的正则表达式,python,regex,Python,Regex,我想找出在python中使用的正确正则表达式来解决我的任务。我为我使用的一个著名的通信程序编写了一个机器人 我想提取聊天信息中的所有给定信息。所以我有下面的模式 $[BOT][不必要的空白][COMMAND][不必要的空白][格式为[KEY]=[VALUE]的可选参数除以不必要的空白] 例如: $mail bot[WS]显示 $mail bot[WS][WS]show $mail bot[WS]显示[WS] $mail bot[WS]显示[WS][WS] $mail bot[WS]show[WS

我想找出在python中使用的正确正则表达式来解决我的任务。我为我使用的一个著名的通信程序编写了一个机器人

我想提取聊天信息中的所有给定信息。所以我有下面的模式 $[BOT][不必要的空白][COMMAND][不必要的空白][格式为[KEY]=[VALUE]的可选参数除以不必要的空白]

例如:

  • $mail bot[WS]显示
  • $mail bot[WS][WS]show
  • $mail bot[WS]显示[WS]
  • $mail bot[WS]显示[WS][WS]
  • $mail bot[WS]show[WS][WS][WS]
  • $mail bot[WS]show[WS]a=1
  • $mail bot[WS]show[WS][WS]a=1
  • $mail bot[WS]show[WS][WS][WS]a=1
  • $mail bot[WS]show[WS]a=1[WS]d=4
  • $mail bot[WS]show[WS]ab=43[WS][WS]cd=23
  • 说明: [WS]代表空白(很抱歉,我无法在预览中看到它们)

    预期结果(所有示例):
    bot=邮件bot
    cmd=show

    预期结果(对于6.到8.):
    arguments=[{'a':'1'}]

    预期结果(对于9.):
    arguments=[{'a':'1','d':'4'}]

    预期结果(对于10.):
    arguments=[{'ab':'43','cd':'23'}]

    我现在拥有的正则表达式如下:
    ^\$(?[A-Za-z\-\-+)(?{0,})(?[A-Za-z\-+)(?({1,})(?(?{0,})(?\w+=(?\w+){0,1}$

    到目前为止,我在regex101上测试了给定的regex,我能够提取的是所有信息,除了参数(如果有多个参数的话)之外。 因此,案例1。到八点。正在使用给定的正则表达式,但是9。和10。不要

    有人能帮我吗?谢谢大家!

    致以最良好的祝愿,
    mr_5p4rk_

    以下正则表达式与您似乎想要的匹配:

    ^\$(?P<bot>[A-Za-z\-_]+) (?P<cmd>[A-Za-z\-_]+)(?P<options> +(?P<argument>(?P<key>[a-z]+)=(?P<value>[0-9]+)))+
    
    P[A-Za-z\-+]P[A-Za-z\-+]P


    您遇到的问题与无效的重复模式、无效的命名组以及到处缺少空格有关。

    请将文本粘贴到scanPython的标准
    re
    模块可以匹配重复组(如您的键和值),但无法有效地捕获它们,因为每个后续匹配都会覆盖以前捕获的文本。您可能需要研究一个较新的实验性
    regex
    模块,我相信它能够处理重复捕获(尽管我不知道详细信息)。谢谢你的建议。我会尝试一下。但与此同时,我采用了另一种方法,将字符串从键值对中分离出来,并分别分析每个部分。你的正则表达式有语法错误。@Mr5p4RK_2;如果你觉得有用,请检查答案并接受/投票?
    ^\$(?P<bot>[A-Za-z\-_]+) (?P<cmd>[A-Za-z\-_]+)(?P<options> +(?P<argument>(?P<key>[a-z]+)=(?P<value>[0-9]+)))+
    
    ^\$(?P<bot>[A-Za-z\-_]+) (?P<cmd>[A-Za-z\-_]+)(?P<options> +(?P<argument>(?P<key>[a-z]+)=(?P<value>[0-9]+)))(?P<options2> +(?P<argument2>(?P<key2>[a-z]+)=(?P<value2>[0-9]+)))