在python中,使用通过串行端口连接到笔记本电脑的GSM调制解调器接收的正则表达式解析字符串
这是我用来轮询通过串行端口连接到笔记本电脑的GSM调制解调器接收到的新消息的功能。我已经创建了一个串行对象“phone”,我正在使用它读取和写入数据 “电话”将数据读入列表x 当我收到一条新消息时,我得到的响应的格式如下:在python中,使用通过串行端口连接到笔记本电脑的GSM调制解调器接收的正则表达式解析字符串,python,regex,string,parsing,gsm,Python,Regex,String,Parsing,Gsm,这是我用来轮询通过串行端口连接到笔记本电脑的GSM调制解调器接收到的新消息的功能。我已经创建了一个串行对象“phone”,我正在使用它读取和写入数据 “电话”将数据读入列表x 当我收到一条新消息时,我得到的响应的格式如下: +CMTI: "SM",0 这里0是一个索引,表示SIM卡上存储消息的索引位置。 下面的代码用于轮询包含我正在读写的数据的列表x 从串行端口。我正在使用正则表达式解析已转换为字符串myRegexableString的x,以查看是否收到通知 def poll(x):
+CMTI: "SM",0
这里0是一个索引,表示SIM卡上存储消息的索引位置。
下面的代码用于轮询包含我正在读写的数据的列表x
从串行端口。我正在使用正则表达式解析已转换为字符串myRegexableString的x,以查看是否收到通知
def poll(x):
myRegexableString = "".join(x)
print "Printing myRegexableString"
pprint(myRegexableString)
regex = re.compile(r'\+CMTI: "SM",(\d+)')
lst = []
for l in myRegexableString:
for m in [regex.search(l)]:
if myRegexableString:
lst.append(m)
print "You have received a new message!"
我想将上面的代码用于检查网络注册的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
为什么它会多次打印“你收到了一条新消息!”
尤其是当我还没有收到新消息的时候
请提供帮助。您只需使用
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
的每个字符上循环,然后在一个匹配的列表上循环,然后测试myRegexableString
是否为True(如果不是空的话)。这意味着对输入中的每个字符添加一个空匹配项(表达式永远不会匹配单个字符串中的任何内容)