正则表达式输出不正确

问题描述:

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“

如何获得正确的输出结果?

嗯,不完全。首先,您需要一个非捕获组 - 您在那里的捕获组将仅捕获'255.',并将其用作re.findall的输出。

实施例:

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

的(:)构建体是非捕获组 - 并且没有任何捕获组,re.findall返回整个匹配的字符串?。

请注意,这实际上不会返回['255.255', '255.255'] - 它实际上会返回['255.255.', '255.255.']

在你的正则表达式中,你只捕获了第一个255.。你需要用你想在一个捕获组捕捉到的一切:

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

(?:...)是一个非捕获组。它基本上可以让你分组的东西,而不会让他们显示为一个捕获的组。