使用通过python中的串行端口连接到笔记本电脑的GSM调制解调器接收到的正则表达式解析字符串

2024-09-27 00:12:38 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我使用的一个函数,它通过串行端口与我的笔记本电脑相连,用来查询GSM调制解调器接收到的新消息。我创建了一个串行对象“phone”,我用它来读写数据。在

“phone”将数据读入列表x

当我收到一条新消息时,我得到的回复是这样的:

+CMTI: "SM",0

这里0是一个索引,它指示在SIM上存储消息的索引位置。 下面的代码用于轮询包含我正在读写的数据的列表x 从串行端口。我正在使用正则表达式来解析x,它已被转换为字符串myRegexableString,以查看是否收到通知。在

^{pr2}$

我想把上面的代码用于AT命令,检查网络注册。当我执行其他命令时,我也需要轮询新消息,或者任何与此相关的命令,但是为了这个问题,我将以网络注册为例。下面是它在不使用轮询函数的情况下正常运行的方式。在

AT+CREG? #command

+CREG: 0,1 #response

OK #status

这是密码。在

def register():
   print "Checking for network registration"
   phone.write(b'AT+CREG?\r')
   sleep()
   x=phone.read(50)
   sleep()
   print x

现在假设我在这里包含轮询,代码将更改为

def register():
       print "Checking for network registeration"
       phone.write(b'AT+CREG?\r')
       sleep()
       x=phone.read(50)
       poll(x)
       sleep()
       print x

我从修改后的代码得到的输出是

Checking for network registeration
Printing myRegexableString
'AT+CREG?\r\r\n+CREG: 0,1\r\n\r\nOK\r\n'
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
You have received a new message!
AT+CREG?

+CREG: 0,1

OK

为什么要打印“你收到了一条新消息!”这么多次?在

尤其是当我还没有收到新消息的时候!在

请帮忙。在


Tags: 数据代码命令you消息messagenewhave
1条回答
网友
1楼 · 发布于 2024-09-27 00:12:38

您只需使用regex.findall(myRegexableString)。这将返回匹配的组的列表,因此为数字。在

regex = re.compile(r'\+CMTI: "SM",(\d+)')

def poll(x):
    myRegexableString = "".join(x)
    print "Printing myRegexableString"
    pprint(myRegexableString)
    lst = regex.findall(myRegexableString)

我已经将re.compile()调用移出了函数,不需要每次都重新编译表达式。在

循环遍历myRegexableString中的每个字符,然后在一个匹配one的列表上循环,然后测试myRegexableString是否为True ish(如果它不是空的话)。这意味着对于输入中的每个字符,您将添加一个空匹配(表达式永远不会匹配单个字符串中的任何内容)。在

相关问题 更多 >

    热门问题