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前面没有非空格时,正则表达式才能找到结果。