python正则表达式输出不正确

时间:2012-12-08 03:07:40

标签: python regex

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”

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

2 个答案:

答案 0 :(得分:2)

在正则表达式中,您只捕获第一个255.。您需要在捕获组中包装要捕获的所有内容:

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

(?:...)是一个非捕获组。它基本上允许您对事物进行分组,而不会将它们显示为捕获的组。

答案 1 :(得分: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.']