2013-03-26 51 views
-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 
+3

'LEN(字符串變量)== 11'? – 2013-03-26 20:41:26

+0

...你不能只是做'len(string)== 11'嗎? – Xymostech 2013-03-26 20:41:32

+0

我添加了一些代碼,所以你可以看到,這對我不起作用(也許我錯過了一些東西......我是Python的新手,所以如果是這樣,請糾正我) – 2013-03-26 20:45:57

回答

1

只需測試之後的比賽長度即可。

隨着可選-?部分,加上你的表達式中的+*乘法器,改變它以匹配11個字符將變得棘手。

您可以使用MatchObject.start().end()方法來快速訪問比賽的長度:

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

您可以添加其他檢查你需要列表中的理解。所以,你可以做這樣的事情:

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

然後,當你去通過列表,這些值將TrueFalse,所以你要簡單地檢查本身的價值:

for val in data: 
    if val: 
     ...