2011-01-15 11 views
186

In un programma che sto scrivendo, ho Python che usa la funzione re.search() per trovare le corrispondenze in un blocco di testo e stampare i risultati. Tuttavia, il programma si chiude quando trova la prima corrispondenza nel blocco di testo.Come posso trovare tutte le corrispondenze con un'espressione regolare in Python?

Come si esegue questa operazione ripetutamente dove il programma non si ferma fino a quando sono state trovate tutte le corrispondenze? C'è una funzione separata per fare questo?

+0

[Le statistiche ricorsive] (http://web.archive.org/web/20030206032122/http://www.puffinry.freeserve.co.uk/regex-extension.html) sono una bestia diversa. Vuoi ripetere la ricerca. – outis

risposta

332

Utilizzare re.findall o re.finditer.

re.findall(pattern, string) restituisce un elenco di stringhe corrispondenti.

re.finditer(pattern, string) restituisce un iteratore su oggetti MatchObject.

+2

'finditer' era quello che stavo cercando. Sono sorpreso che si restituiscono oggetti Match e le altre stringhe. Mi aspettavo di usare una funzione 'match_all' o' match_iter'. – dsclose

+7

DISCLAIMER: quelli troveranno solo ** non sovrapposti ** corrisponde a –

+0

@ AntoineLizée, come si trovano le iterazioni con sovrapposizione? – Raksha

Problemi correlati