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ă!= -1sau foloseșteindex(). - Scrii
if text.find("x"):. Poziția 0 este falsă, iar-1este adevărat, deci condiția este inversată. Foloseșteif "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.