Како заменити знак у стрингу користећи Питхон

Ovaj vodič objašnjava različite tehnike za zamenu znakova unutar stringova u programskom jeziku Python, uključujući upotrebu ugrađenih string metoda, regularnih izraza i druge pristupe.

Stringovi u Pythonu su fundamentalne strukture podataka koje čuvaju niz Unicode karaktera. Za razliku od nekih drugih Python struktura, kao što su liste i rečnici, stringovi su nepromenljivi. To znači da jednom kreiran string ne možete direktno izmeniti.

Međutim, često je potrebno manipulisati stringovima – ukloniti nepotrebne razmake na početku ili kraju, promeniti velika i mala slova, zameniti određene karaktere drugim i slično.

Kako se onda manipuliše stringovima u Pythonu? I kako konkretno zameniti karakter u stringu? Na ova pitanja odgovorićemo u ovom vodiču, fokusirajući se na:

  • Nepromenljivost stringova u Pythonu
  • Metode stringova u Pythonu za manipulaciju stringovima
  • Različite načine zamene karaktera unutar stringa

Počnimo odmah…

Nepromenljivost Python stringova

Kao što je već rečeno, stringovi u Pythonu su nepromenljivi. To znači da ne možete modifikovati postojeći string na mestu gde se nalazi. Pokušaj direktne izmene stringa dovešće do greške.

Uzmimo za primer string „Python programiranje!“.

Možete pristupiti pojedinačnom elementu stringa korišćenjem indeksa ili podstringu specificiranjem početnog i krajnjeg indeksa, kao što je prikazano:

>>> my_str = "Python programming!"
>>> my_str[0]
'P'
>>> my_str[4]
'o'
>>> my_str[1:9]
'ython pr'
>>> my_str[9]
'o'

Pretpostavimo da želite zameniti slovo ‘o’ cifrom ‘0’.

Znamo da se ‘o’ nalazi na indeksima 4 i 9 (prema gornjem isečku koda). Međutim, ako pokušate direktno dodeliti znak na određenom indeksu, Python će generisati grešku:

>>> my_str[4] = '0'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

Python nudi set string metoda koje deluju na postojeći string i vraćaju novi string sa željenim modifikacijama.

Takođe pročitajte: Python programi za operacije sa stringovima.

Dakle, možete koristiti string metode u kombinaciji sa list comprehension, petljama i regularnim izrazima za obavljanje manipulacija stringovima. U ovom vodiču, razmotrićemo različite načine za zamenu karaktera u stringu.

Zamena karaktera u Python stringovima

Postoji mnogo situacija u kojima je potrebno zameniti karaktere ili podstringove u Python stringu. Neki od primera su:

  • Čišćenje teksta: Pri radu sa tekstualnim podacima, često je potrebno očistiti tekst zamenom određenih karaktera. Na primer, uklanjanje ili zamena specijalnih znakova, dodatnog belog prostora ili neželjenih simbola.
  • Formatiranje: Možda ćete morati promeniti format teksta, kao što je pisanje velikim ili malim slovima. Na primer, obezbeđivanje doslednog korišćenja velikih slova u naslovima.
  • Maskiranje podataka: Za zaštitu osetljivih podataka, često je potrebno maskirati lične informacije, kao što su brojevi telefona ili brojevi kreditnih kartica, uz očuvanje formata.
  • URL-ovi i putanje: Prilikom rada sa URL adresama ili putanjama datoteka, potrebno je zameniti određene karaktere da bi se obezbedila ispravna formatiranost i kompatibilnost sa veb pregledačima ili sistemima datoteka.

Uzećemo jednostavan primer zamene karaktera u stringu.

Počećemo sa pristupom koji koristi petlje i uslovne naredbe, a zatim preći na bolje metode za isti zadatak.

Nastavićemo sa primerom zamene ‘o’ sa ‘0’ u stringu „Python programiranje!“.

Evo kako možemo proći kroz string koristeći for petlju i zameniti određeni karakter:

original_string = "Python programming!"
new_string = ""
for char in original_string:
    if char == "o":
        new_string += "0"
    else:
        new_string += char
print(new_string)  

U ovom pristupu, ručno prolazimo kroz svaki karakter u `original_string`. Ako je karakter ‘o’, dodajemo ‘0’ u `new_string`, u suprotnom, dodajemo isti karakter. Na taj način, vršimo zamenu karaktera i kreiramo novi string.

# Output
Pyth0n pr0gramming!

Korišćenje for petlje i uslovnog grananja sa if naredbama može biti teško za održavanje, pogotovo kada treba zameniti podstring ili više karaktera.

Postoje bolji pristupi za zamenu karaktera ili podstringova, koje ćemo razmotriti u sledećim odeljcima.

#1. Korišćenje `str.replace()`

Možemo koristiti metodu `replace()` za zamenu jednog ili više karaktera drugim stringom. `str.replace(old, new)` zamenjuje sva pojavljivanja `old` stringa sa `new` stringom.

Ovde koristimo slovo ‘o’ sa cifrom ‘0’ u metodi `replace()` na `original_string`.

original_string = "Python programming!"
new_string = original_string.replace("o", "0")
print(new_string) 

Rezultujući string se nalazi u `new_string`.

# Output
Pyth0n pr0gramming!

#2. Korišćenje list comprehension i metode `join()`

Da bismo zamenili karakter u Python stringu, možemo kombinovati list comprehension sa metodom `join()`.

Pogledajmo kako možemo prepisati naš primer:

  • Možemo koristiti list comprehension da iteriramo kroz svaki karakter u `original_string`. Ako je karakter ‘o’, zamenjujemo ga sa ‘0’, inače zadržavamo isti karakter.
  • Zatim koristimo `str.join()` da kombinujemo ove karaktere u jedan string, što rezultira sa `new_string`. Ovo je koncizna alternativa petlji i uslovnom grananju kada treba zameniti jedan karakter u stringu.
original_string = "Python programming!"
new_string = ''.join(['0' if char == 'o' else char for char in original_string])
print(new_string) 

Dobijamo očekivani izlaz:

# Output
Pyth0n pr0gramming!

#3. Korišćenje regularnih izraza

Drugi metod za zamenu karaktera u Python stringovima je korišćenje regularnih izraza (regex). Python dolazi sa ugrađenim `re` modulom za operacije sa regularnim izrazima. Korišćenjem regularnih izraza, možete specificirati obrazac za pretragu, string u kome tražite i string kojim zamenjujete odgovarajući obrazac.

Ovde koristimo funkciju `sub()` iz `re` modula sa sintaksom `re.sub(pattern, replacement, string)`.

import re

original_string = "Python programming!"
new_string = re.sub(r'o', '0', original_string)
print(new_string) 

Obrazac `r’o’` pronalazi sva pojavljivanja slova ‘o’ u `original_string` i zamenjuje ih sa ‘0’.

# Output
Pyth0n pr0gramming!

Možete koristiti regularne izraze za pronalaženje složenijih obrazaca. Uzmimo primer maskiranja brojeva kreditnih kartica. Pretpostavimo da želimo da zamenimo sve brojeve – osim poslednja četiri – sa ‘X’. Evo kako to možemo uraditi:

import re

def mask_credit_card(card_number):
    # Koristimo regularne izraze da pronađemo i zamenimo karaktere
    masked_number = re.sub(r'\d(?=\d{4})', 'X', card_number)
    return masked_number

# Primer upotrebe:
credit_card_number = "1234567898765432"
masked_number = mask_credit_card(credit_card_number)
print(masked_number)

A ovo je izlaz:

# Output
XXXXXXXXXXXX5432

Da bismo pojednostavili regularni izraz, izostavili smo crticu, ali možete modifikovati primer prema potrebi.

#4. Korišćenje `str.maketrans()` i `str.translate()`

Metode `str.maketrans()` i `str.translate()` u Pythonu se koriste za zamenu karaktera u stringovima na nivou pojedinačnih karaktera.

Kako radi `str.maketrans()`

Metoda `maketrans()` se koristi za kreiranje tabele preslikavanja koja definiše kako se karakteri u stringu trebaju zameniti. Koristi se sa sintaksom: `str.maketrans(x, y)`, gde:

  • `x` je string koji sadrži karaktere koje želite zameniti.
  • `y` je string koji sadrži karaktere sa kojima želite zameniti karaktere iz `x`.

Metoda `maketrans()` generiše tabelu preslikavanja na osnovu korespondencije između `x` i `y`. Zatim možete koristiti ovu tabelu preslikavanja sa metodom `str.translate()` da izvršite zamenu.

Kako radi `str.translate()`

Metoda `str.translate()` se koristi za primenu tabele preslikavanja koju kreira `str.maketrans()` na string. Ona vrši zamenu karakter po karakter na osnovu definisanog preslikavanja u tabeli. Metoda vraća novi string sa zamenjenim karakterima.

Evo kako možete koristiti metodu `translate()`:

new_string = original_string.translate(translation_table)
  • `original_string`: Ulazni string koji želite izmeniti.
  • `translation_table`: Tabela preslikavanja kreirana pomoću `str.maketrans()`, koja definiše preslikavanja karaktera.

Kombinujući metode `maketrans()` i `str.translate()`, možemo prepisati naš primer ovako:

original_string = "Python programming!"
translation_table = str.maketrans('o', '0')
new_string = original_string.translate(translation_table)
print(new_string)

Ovde kreiramo tabelu preslikavanja pomoću `str.maketrans(‘o’, ‘0’)` da naznačimo da ‘o’ treba zameniti sa ‘0’. Zatim koristimo metodu `translate()` na `original_string` da primenimo ovo preslikavanje, što rezultira sa `new_string`.

# Output
Pyth0n pr0gramming!

Ove metode su korisne za zadatke kao što su zamena karaktera i druge manipulacije na nivou pojedinačnih karaktera u stringovima.

Zaključak

Hajde da ponovimo šta smo naučili.

Python stringovi su nepromenljivi. Zato, kada želite zameniti karakter u Python stringu, ne možete samo ponovo dodeliti karakter određenom indeksu. Razmotrili smo sledeće pristupe za zamenu karaktera ili više karaktera u stringu:

  • Koristite `str.replace(old, new)` da zamenite sva pojavljivanja starog podstringa novim podstringom.
  • Možete koristiti i list comprehension i metodu `join()`. List comprehension koristite da biste zamenili karaktere, a `join()` da biste spojili listu karaktera u string.
  • Možete koristiti pronalaženje šablona sa regularnim izrazima da biste zamenili pojavljivanja karaktera ili obrasca. Koristite funkciju `sub()` sa `re.sub(pattern, replacement, string)`.
  • Koristite `str.maketrans()` da dobijete tabelu preslikavanja i `translate()` metodu da primenite tabelu na originalni string.

Obavezno isprobajte neke primere da biste bolje razumeli ove tehnike. Zatim, naučite kako da uklonite poslednji znak iz Python stringa.