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.']”</p>

为什么不【255.255,255.255】?</p>

mactch 对象应该是“255.255”

我怎样才能得到正确的输出结果?

4

2 回答 2

2

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

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

(?:...)是非捕获组。它基本上可以让您对事物进行分组,而无需将它们显示为捕获的组。

于 2012-12-08T03:12:05.587 回答
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.']

于 2012-12-08T03:14:55.737 回答