Ce face re.findall()
re.findall() găsește toate porțiunile care se potrivesc, de la stânga la dreapta, fără suprapuneri. Ce conține lista depinde de grupuri: fără grupuri, textele găsite; cu un grup, doar conținutul grupului; cu mai multe grupuri, tupluri.
Pentru grupuri care nu trebuie capturate folosește (?:...). Dacă ai nevoie și de poziții, folosește re.finditer(). Pattern.findall() este varianta pentru modele compilate.
Parametri
| Parametru | Descriere |
|---|---|
model |
Expresia regulată. |
text |
Textul în care se caută. |
flags |
Opțional. Flag-uri. |
Ce returnează
O listă de texte sau de tupluri (goală dacă nu există potriviri).
Exemple
Exemplul 1: Toate numerele și toate email-urile
import re
text = "Am plătit 120 lei, apoi 35 lei și 7 lei."
print(re.findall(r"\d+", text))
print(sum(map(int, re.findall(r"\d+", text))))
contacte = "ana@exemplu.ro, mihai.pop@firma.com; ioana@test.ro"
print(re.findall(r"[\w.]+@[\w.]+\.\w+", contacte))
Rezultat
['120', '35', '7']
162
['ana@exemplu.ro', 'mihai.pop@firma.com', 'ioana@test.ro']
Exemplul 2: Efectul grupurilor
import re
text = "Iași 25°C, Cluj 19°C"
print(re.findall(r"\w+ \d+", text))
print(re.findall(r"(\w+) \d+", text))
print(re.findall(r"(\w+) (\d+)", text))
print(re.findall(r"(?:\w+) (\d+)", text))
Rezultat
['Iași 25', 'Cluj 19']
['Iași', 'Cluj']
[('Iași', '25'), ('Cluj', '19')]
['25', '19']
Greșeli frecvente
- Adaugi paranteze doar pentru grupare și rezultatul se schimbă brusc (conține doar grupul). Folosește
(?:...)pentru grupuri fără captură.
Comenzi înrudite
re.finditer(): Parcurge toate potrivirile unui model, dând pentru fiecare un obiect Match cu poziție și grupuri.re.search(): Caută prima potrivire a unei expresii regulate oriunde într-un text.str.count(): Numără de câte ori apare un subșir într-un text, fără suprapuneri.