2012-12-08 260 views
2
import os,re 
def test(): 
    list = re.findall(r'(255\.){2}','255.255.252.255.255.12') 
    print list 
if __name__ == '__main__': 
test() 

輸出:?「[ '255', '255']」正則表達式輸出不正確

何不【255.255,255.255】

的mactch對象應是「 255.255「

如何獲得正確的輸出結果?

回答

1

嗯,不完全。首先,您需要一個非捕獲組 - 您在那裏的捕獲組將僅捕獲'255.',並將其用作re.findall的輸出。

實施例:

re.findall(r'(?:255\.){2}', '255.255.252.255.255.12') 

的(:)構建體是非捕獲組 - 並且沒有任何捕獲組,re.findall返回整個匹配的字符串?。

請注意,這實際上不會返回['255.255', '255.255'] - 它實際上會返回['255.255.', '255.255.']

2

在你的正則表達式中,你只捕獲了第一個255.。你需要用你想在一個捕獲組捕捉到的一切:

>>> re.findall(r'((?:255\.){2})','255.255.252.255.255.12') 
['255.255.', '255.255.'] 

(?:...)是一個非捕獲組。它基本上可以讓你分組的東西,而不會讓他們顯示爲一個捕獲的組。