-1

私は次の正規表現を持っています:

valueRegex = re.compile('^(?P<DevID>.{2})(?P<CMD>TMPA|BATT)(?P<Value>-?[\d\.]+)-*$', re.I)

ここで、指定された文字列の正確な長さが11文字であるかどうかをさらに確認します。通常は問題ありませんが、この場合の実装方法がわかりません。いくつかの試みはうまくいきませんでした、そして私は考えがありません。:/

おそらく、私は非常に簡単な解決策を見るのが盲目です:)

文字列をチェックする必要がある関数は次のとおりです。

def parseMessages(llapMsg):
    rawMsgs = llapMsg.split('a')
    result = []

    data = [valueRegex.match(val) for val in rawMsgs]

    for val in data:
        if val is not None:
            result.append(val.groupdict())

    return result
4

2 に答える 2

1

後で試合の長さをテストする方が簡単です。

オプション-?の部分に加えて、式の+*乗数の両方を使用して、11文字に一致するように変更するのは難しいでしょう。

MatchObject .start()およびメソッドを使用して.end()、一致の長さにすばやくアクセスできます。

for val in data:
    if val is not None and (val.end() - val.start()) == 11:
        result.append(val.groupdict())
于 2013-03-26T20:48:55.677 に答える
0

リスト内包内に必要なチェックを追加できます。したがって、次のようなことができます。

data = [valueRegex.match(val) != None and len(val) == 11 for val in rawMsgs]

次に、リストを確認すると、値はTrueまたはFalseになります。したがって、値自体を確認するだけです。

for val in data:
    if val:
        ...
于 2013-03-26T20:47:27.980 に答える