1

我需要一个正则表达式来解析当我在通过串行端口连接到笔记本电脑的 GSM 调制解调器上收到消息时收到的消息通知。

一般格式如下:

+CMTI: "SM",0 

这里 0 是存储在 SIM 卡上的消息的索引号,可以取任意数值。

我现在使用的是:

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

我应该改用什么?

更新: 这是我现在使用的代码:

def poll(x):
    regex = re.compile("\+CMTI: \"SM\",\d+")
    lst = []
    for l in x:
        for m in [regex.search(l)]:
            if m:
                lst.append(m)
                print "You have received a new message!"

我怎样才能在这里实现 re.match 呢?

另一个更新: 我已经根据这里的所有答案修改了代码。然而,它似乎仍然不起作用。

def poll(x):
    regex = re.compile(r'\+CMTI: "SM",(\d+)')
    lst = []
    for l in x:
        for m in [regex.search(l)]:
            if m:
                lst.append(m)
                print "You have received a new message!"
4

3 回答 3

2

\d 只会捕获一个数字。您对索引本身感兴趣吗?在这种情况下,您需要添加一个捕获组,以便您可以提取它,例如

>>> re.match(r'\+CMTI: "SM",(\d+)', '+CMTI: "SM",0').group(1)
'0'
>>> re.match(r'\+CMTI: "SM",(\d+)', '+CMTI: "SM",234566').group(1)
'234566'

使用已编译的正则表达式,它变为:

>>> regex = re.compile(r'\+CMTI: "SM",(\d+)')
>>> regex.match('+CMTI: "SM",0').group(1)
'0'

您的代码中将消息 ID 附加到列表“lst”的完整示例是

def poll(x):
    regex = re.compile(r'\+CMTI: "SM",(\d+)')
    lst = []
    for line in x:
        match = regex.search(line):
        if match:
            lst.append(match.group(1))
            print "You have received a new message!"
于 2013-03-28T09:53:20.337 回答
0

你的正则表达式对我来说很好。我要改变的一件事是添加+after \d

re.match(r'\+CMTI: \"SM\",\d+', '+CMTI: "SM",0')
于 2013-03-28T09:52:14.637 回答
0

如果您想从字符串中接收 0,您可以尝试:'+CMTI: "SM",(\d)'

于 2013-03-28T09:55:14.007 回答