-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

之后只测试比赛的长度会更容易。

使用可选-?部分,再加上表达式中的 the+*multipliers,将其更改为匹配 11 个字符将是......棘手的。

您可以使用MatchObject .start()and.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]

然后,当您浏览列表时,值将是Trueor False,因此您只想检查值本身:

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