对给定的RegEx进行额外的长度检查

时间:2013-03-26 20:40:33

标签: python regex

我有以下RegEx:

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

2 个答案:

答案 0 :(得分:1)

稍后测试比赛的长度会更容易

使用可选的-?部分,加上表达式中的+*乘数,将其更改为匹配11个字符将会很棘手。

您可以使用MatchObject .start().end()方法快速访问匹配的长度:

for val in data:
    if val is not None and (val.end() - val.start()) == 11:
        result.append(val.groupdict())

答案 1 :(得分:0)

您可以在列表推导中添加所需的其他检查。所以,你可以这样做:

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

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

for val in data:
    if val:
        ...