2014-04-20 13 views
7

Ho bisogno di limite re.findall per trovare le prime 3 corrispondenze e quindi fermarsi.Trova le prime corrispondenze x con re.findall

ad esempio

text = 'some1 text2 bla3 regex4 python5' 
re.findall(r'\d',text) 

allora ottengo:

['1', '2', '3', '4', '5'] 

e voglio:

['1', '2', '3'] 
+0

Si può dare un'occhiata qui: http://stackoverflow.com/questions/16235770/how-to- limit-regexs-findall-method –

+1

o meglio qui: http://stackoverflow.com/questions/11902378/python-regular-expressions-limit-results –

risposta

8

Per trovare N corrisponde e stop, è possibile utilizzare re.finditer e itertools.islice:

>>> import itertools as IT 
>>> [item.group() for item in IT.islice(re.finditer(r'\d', text), 3)] 
['1', '2', '3'] 
8

re.findall restituisce una lista, quindi la soluzione più semplice sarebbe quella di utilizzare solo slicing :

>>> import re 
>>> text = 'some1 text2 bla3 regex4 python5' 
>>> re.findall(r'\d', text)[:3] # Get the first 3 items 
['1', '2', '3'] 
>>> 
Problemi correlati