python正则表达式重复组匹配

时间:2012-07-25 21:41:32

标签: python regex

  

可能重复:
  Python regular expressions - how to capture multiple groups from a wildcard expression?


我无法在以下正则表达式中访问第3或第5个元素的组:

>>> x = 'f 167 2958 335 3103 0'
>>> re.search('.(\s\d+){5}', x).group()
'f 167 2958 335 3103 0'
>>> re.search('.(\s\d+){5}', x).group(1)
' 0'
>>> # how do i access no 2958 and 3103

我知道我可以通过pattern ='。\ s \ d + \ s(\ d +)\ s \ d + \ s(\ d +)\ s \ d +'来实现上述目标,但那很蹩脚。

谢谢, 阿米特

2 个答案:

答案 0 :(得分:3)

您可以使用re.findall

result = re.findall('\s\d+', x)

print result[1]  # 2958
print result[3]  # 3103

答案 1 :(得分:0)

如果这是一般性问题,则findall是您最好的选择。

如果这是你想要做的事情,split会更有意义:

>>> x = 'f 167 2958 335 3103 0'
>>> l = x.split()
>>> l[2]
'2958'
>>> l[4]
'3103'