Sebelum teks bisa diolah, program perlu menjawab dua pertanyaan mendasar: apakah sebuah potongan teks ada di dalam string, dan di posisi mana teks itu berada. Setelah jawaban ditemukan, langkah lanjut yang paling umum adalah mengganti potongan tersebut dengan teks lain. Chapter ini merangkum perangkat pencarian dan penggantian milik tipe str — dari operator in yang paling sederhana sampai removeprefix() dan removesuffix() yang hadir di Python 3.9 — beserta strategi menghadapi perbedaan kapitalisasi.

Memeriksa Kehadiran Teks #

Untuk sekadar menjawab “ada atau tidak”, operator in adalah alat paling jujur: operator tersebut mengembalikan bool tanpa kompromi. Ketika posisi kemunculan ikut dibutuhkan, method find() melaporkannya:

python
kalimat = "Belajar Python itu menyenangkan"

print("Python" in kalimat)
print("Java" in kalimat)
print(kalimat.find("Python"))
print(kalimat.find("Java"))

Output yang Dihasilkan:

text
True
False
8
-1

Mari kita bedah keempat barisnya:

  1. Baris 3 ("Python" in kalimat): operator in memeriksa kehadiran substring dan mengembalikan True; operator not in memeriksa kebalikannya.
  2. Baris 4 ("Java" in kalimat): substring yang absen membuat in mengembalikan False — bukan error, sehingga operator ini aman untuk pemeriksaan.
  3. Baris 5 (find("Python")): posisi yang dilaporkan adalah 8, index karakter P pertama — delapan karakter Belajar (termasuk satu spasi) mendahului kata Python.
  4. Baris 6 (find("Java")): pencarian yang gagal membuat find() mengembalikan -1.

Perilaku find() versus index() sudah kita bandingkan pada Chapter String Methods: find() mengembalikan -1 saat tidak ketemu, sedangkan index() memicu ValueError. Untuk pemeriksaan kehadiran murni, in tetap yang paling terbaca niatnya — find() >= 0 bekerja tetapi bertele-tele.

Mengganti Teks dengan replace() #

Method replace() mengganti setiap kemunculan substring lama dengan substring baru, dan mengembalikan string hasil — ingat bahwa string asal tidak pernah berubah. Argument ketiga yang bersifat opsional membatasi jumlah penggantian dari kiri:

python
teks = "satu dua satu tiga satu"

print(teks.replace("satu", "SATU"))
print(teks.replace("satu", "SATU", 2))

Output yang Dihasilkan:

text
SATU dua SATU tiga SATU
SATU dua SATU tiga satu

Pemanggilan tanpa batas mengganti ketiga kemunculan "satu", sedangkan replace("satu", "SATU", 2) berhenti setelah dua penggantian — kemunculan ketiga dibiarkan apa adanya. Perhatikan pula bahwa string kosong sebagai pengganti, replace("satu", ""), merupakan cara cepat menghapus sebuah substring dari seluruh teks.

Strategi Pencarian Tanpa Peduli Kapitalisasi #

Semua alat di atas membandingkan karakter secara persis: P dan p adalah dua karakter berbeda. Ketika sumber teks tidak konsisten kapitalisasinya, strategi standarnya adalah menormalkan kedua sisi dengan lower() sebelum membandingkan:

python
kalimat = "Belajar PYTHON Setiap Hari"
target = "python"

print(target in kalimat)
print(target in kalimat.lower())

Output yang Dihasilkan:

text
False
True

Pencarian "python" in kalimat gagal karena teks aslinya berhuruf besar semua. Menormalkan kalimat dengan lower() membuat pencarian menemukan kata tersebut tanpa peduli kapitalisasi aslinya. Pola yang sama berlaku untuk find(), replace(), startswith(), dan endswith() — normalisasi dulu, baru operasi.

removeprefix() dan removesuffix() #

Dua method termuda pada str — hadir sejak Python 3.9 — menjawab kebutuhan spesifik: membuang awalan atau akhiran tertentu jika memang ada. Bedanya dengan replace(): kedua method ini hanya memotong sekali di ujung, dan tidak melakukan apa-apa bila awalan/akhiran tidak cocok:

python
nama_file = "laporan-penjualan.csv"

print(nama_file.removeprefix("laporan-"))
print(nama_file.removesuffix(".csv"))

Output yang Dihasilkan:

text
penjualan.csv
laporan-penjualan

Sebelum Python 3.9, pekerjaan semacam ini ditulis dengan slicing bersyarat seperti nama_file[8:] if nama_file.startswith("laporan-") else nama_file — fungsional tetapi bertele-tele. Method removeprefix() dan removesuffix() membuat niat kode terbaca langsung: buang awalan laporan-, buang akhiran .csv.

Sebagai penutup, ingat kembali hukum yang berlaku pada seluruh chapter ini: replace(), removeprefix(), dan removesuffix() semuanya mengembalikan string baru. Tanpa assignment seperti teks = teks.replace("lama", "baru"), hasil penggantian hilang begitu baris selesai dievaluasi.