re.findall() în Python

Returnează lista tuturor potrivirilor unui model într-un text.

Sintaxă
re.findall(model, text, flags=0)

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.