Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/301.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正则表达式从调制解调器AT命令提取响应_Python_Regex - Fatal编程技术网

Python正则表达式从调制解调器AT命令提取响应

Python正则表达式从调制解调器AT命令提取响应,python,regex,Python,Regex,向调制解调器发送命令时,通常先发送命令(如AT),然后再发送\r。然后,人们会监听调制解调器以查看命令的结果,该命令本身会重复执行。因此,来自调制解调器的典型通信反馈如下 AT\r\rOK\r\n AT\r\rERROR\r\n 如果出现错误,它看起来像 AT\r\rOK\r\n AT\r\rERROR\r\n 但一般来说,根据实际的AT命令,返回值可以是除OK和ERROR之外的任何值 我想提取这个响应,即一个正则表达式,它返回OK、ERROR或调制解调器响应的任何内容。以下是条件:

向调制解调器发送命令时,通常先发送命令(如
AT
),然后再发送
\r
。然后,人们会监听调制解调器以查看命令的结果,该命令本身会重复执行。因此,来自调制解调器的典型通信反馈如下

AT\r\rOK\r\n
AT\r\rERROR\r\n
如果出现错误,它看起来像

AT\r\rOK\r\n
AT\r\rERROR\r\n
但一般来说,根据实际的AT命令,返回值可以是除
OK
ERROR
之外的任何值

我想提取这个响应,即一个正则表达式,它返回
OK
ERROR
或调制解调器响应的任何内容。以下是条件:

  • 我想验证字符串中的原始命令,即
    ATX\r\rOK\r\n
    不应在命令仅位于
    AT
    时匹配
  • 我根本不关心有多少空白字符,我唯一希望的是在结尾有一个
    \n
    。因此,在韩国的
    AT\rOK\n
    和在韩国的
    AT\nOK\r\r\n
    也应该匹配,但在韩国的
    AT\nOK\r\r
    不匹配
  • 最后,我不关心左侧的额外内容,只要它们通过空格字符与AT命令分开。因此
    OK\rAT\rOK\n
    应该匹配(即
    OK
    的右侧出现),但是
    XAT\rOK\r\n
    不应该匹配
可以用一个正则表达式来提取调制解调器响应,还是需要进行多个正则表达式搜索?要查看整个内容是否正确匹配,我可能已经找到了一个表达式:

r = re.compile("\s+AT\s+\w+\s*\\n$")
但是如何提取
\w+
所包含的内容呢?

您将
()
放在要提取的部分周围,这样您的正则表达式将读取
r”(?。然后您将一个组与匹配项一起,您可以提取,例如使用

r.search("yourText").group(1)

使用负回溯来抑制前面带有非空格字符的匹配,并使用括号来捕获响应:
r”(?我猜是这样!但我意识到您在回答中使用的表达式不正确,因为它匹配
“OK\rAAT\nOK\n”
(不应该是这种情况,因为里面的部分是
AAT
)。有什么改进的建议吗?我尝试了
[^\s]
加上和不加
*
+
但都不起作用。@Alex正则表达式
(?现在应该起作用了。我编辑了答案。我发现
[^\s]
不起作用,因为字符
^
意味着反转。因此我尝试了
[\s^]
相反,但这也不起作用。类似于\rOK\n
的表达式不匹配。为什么?@Alex
\S
[^\S]相同
但问题是您必须将这个非空格字符类放在环视断言中,这意味着只有在AT前面没有非空格时,正则表达式才能找到结果。