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 は 1 桁のみをキャプチャします。インデックス自体に興味がありますか? その場合、抽出できるようにキャプチャ グループを追加する必要があります。

>>> 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'

リスト「lst」にメッセージ ID を追加するコードの完全な例は次のようになります。

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

あなたの正規表現は私にとってはうまくいきます。私が変更したいことの1つは、+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 に答える