2012-07-25 34 views
3

可能重复:
Python regular expressions - how to capture multiple groups from a wildcard expression?蟒正则表达式重复组匹配


我不能访问该组为第三或第五元件在以下的正则表达式:

>>> 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 +',但那是跛脚。

感谢, 阿米特

回答

3

您可以使用re.findall这一点。

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

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

如果这是一个普遍问题,那么findall是你最好的选择。

如果这是你正在试图做的事情实际,split会更有意义:

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