我有以下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
答案 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]
然后,当您浏览列表时,值将为True
或False
,因此您只想检查值本身:
for val in data:
if val:
...