str.find(), rfind(), index() și rindex() în Python

Metode pentru șiruri Python 3.0+

Caută un subșir într-un text și returnează poziția primei (sau ultimei) apariții.

Sintaxă
text.find(sub[, start[, end]])
text.index(sub[, start[, end]])

Ce face str.find(), rfind(), index() și rindex()

find() returnează poziția primei apariții a lui sub sau -1 dacă nu îl găsește. index() face același lucru, dar aruncă ValueError când subșirul lipsește. rfind() și rindex() caută ultima apariție.

start și end limitează căutarea la o porțiune, ca la felii. Dacă vrei doar să știi dacă subșirul există, sub in text este mai clar. Toate patru există și pentru bytes.

Parametri

Parametru Descriere
sub Subșirul căutat.
start, end Opțional. Porțiunea în care se caută.

Ce returnează

Poziția (de la 0). find/rfind: -1 dacă lipsește; index/rindex: ValueError.

Exemple

Exemplul 1: Căutare înainte și înapoi

text = "banana"
print(text.find("an"), text.rfind("an"))
print(text.find("x"))
print(text.find("a", 2))

Rezultat

1 3
-1
3

Exemplul 2: Extragerea domeniului dintr-un email

email = "ana.pop@exemplu.ro"
poz = email.index("@")
print(email[:poz], email[poz + 1:])
try:
    "adresa-invalida".index("@")
except ValueError as e:
    print("Eroare:", e)
print(b"a/b/c".rfind(b"/"))

Rezultat

ana.pop exemplu.ro
Eroare: substring not found
3

Greșeli frecvente

  • Folosești rezultatul lui find() direct într-o felie. Dacă subșirul lipsește, -1 înseamnă ultimul caracter și obții un rezultat greșit fără eroare. Verifică != -1 sau folosește index().
  • Scrii if text.find("x"):. Poziția 0 este falsă, iar -1 este adevărat, deci condiția este inversată. Folosește if "x" in text:.

Comenzi înrudite

  • in / not in: Verifică dacă o valoare se află într-o listă, text, dicționar sau mulțime.
  • str.count(): Numără de câte ori apare un subșir într-un text, fără suprapuneri.
  • str.partition() și str.rpartition(): Împarte un text în trei: partea dinainte de separator, separatorul și partea de după.
  • re.search(): Caută prima potrivire a unei expresii regulate oriunde într-un text.