Dasar Otomasi · Pelajaran 3 dari 8
Pola teks dengan regular expression
10 menit baca · BelajarCode
Regular expression (regex) adalah bahasa kecil untuk mendeskripsikan pola teks. Dengan regex, kamu bisa mencari semua tanggal, nomor nota, atau nominal uang di dalam teks panjang dengan satu baris kode.
| Simbol | Artinya | Contoh pola | Cocok dengan |
|---|---|---|---|
\d | Satu digit angka | \d\d | 07, 42 |
\w | Huruf, angka, atau garis bawah | \w+ | invoice_12 |
\s | Spasi atau tab | \s+ | spasi berapa pun |
+ | Satu kali atau lebih | \d+ | 7, 2026, 150000 |
* | Nol kali atau lebih | ab* | a, ab, abbb |
? | Nol atau satu kali | Rp\.? | Rp, Rp. |
{n} | Tepat n kali | \d{4} | 2026 |
[...] | Salah satu karakter | [A-Z] | huruf kapital apa pun |
( ) | Mengelompokkan dan mengambil bagian | (\d+) | angkanya saja |
Mencari semua kecocokan
1import re23pesan = """Pesanan INV-2026-0012 sudah dibayar tanggal 03/09/2026.4Pesanan INV-2026-0015 menunggu pembayaran sampai 10/09/2026.5Hubungi kami di 0812-3456-7890."""67print(re.findall(r"INV-\d{4}-\d{4}", pesan))8print(re.findall(r"\d{2}/\d{2}/\d{4}", pesan))['INV-2026-0012', 'INV-2026-0015'] ['03/09/2026', '10/09/2026']
Huruf r di depan teks pola membuat garis miring terbalik dibaca apa adanya. Selalu tulis pola regex dengan awalan r.
Mengambil bagian dengan grup
1import re23catatan = "Transfer Rp1.250.000 dari Bu Sari, lalu Rp75.000 dari Pak Budi, dan Rp. 300.000 dari Toko Maju."4nominal = re.findall(r"Rp\.?\s?([\d.]+)", catatan)5print(nominal)6angka = [int(n.replace(".", "")) for n in nominal]7print("Total:", sum(angka))['1.250.000', '75.000', '300.000'] Total: 1625000
Tanda kurung ([\d.]+) membuat findall hanya mengembalikan bagian angkanya, tanpa "Rp".
Mengganti dengan pola
1import re23teks = "Hubungi 0812-3456-7890 atau 0857 1111 2222 untuk info."4disamarkan = re.sub(r"(\d{4})[-\s]?\d{4}[-\s]?(\d{4})", r"\1-xxxx-\2", teks)5print(disamarkan)Hubungi 0812-xxxx-7890 atau 0857-xxxx-2222 untuk info.
re.sub mengganti setiap kecocokan. \1 dan \2 merujuk grup pertama dan kedua dari pola, sehingga empat digit awal dan akhir tetap dipertahankan.
Regex mudah menjadi sulit dibaca
Regex sangat kuat, tetapi pola yang panjang sulit dipahami bahkan oleh penulisnya sendiri minggu depan. Pakai regex untuk pola yang memang rumit, beri komentar yang menjelaskan maksudnya, dan uji dengan contoh-contoh yang beragam.
Cek pemahaman
Pola regex mana yang cocok dengan kode pos Indonesia yang terdiri dari tepat 5 digit?
Latihan
Ambil data dari pesan pesanan
Dari pesan berikut, ambil nama produk, jumlah, dan harga satuannya, lalu hitung totalnya: "2x Kopi susu @15000, 1x Roti bakar @18000, 3x Air mineral @5000".
Pembahasan
1import re23pesan = "2x Kopi susu @15000, 1x Roti bakar @18000, 3x Air mineral @5000"4total = 05for jumlah, produk, harga in re.findall(r"(\d+)x ([\w ]+?) @(\d+)", pesan):6 subtotal = int(jumlah) * int(harga)7 total += subtotal8 print(f"{produk:<12} {jumlah} x {harga} = {subtotal}")9print("Total:", total)Kopi susu 2 x 15000 = 30000 Roti bakar 1 x 18000 = 18000 Air mineral 3 x 5000 = 15000 Total: 63000
Pola [\w ]+? mengambil huruf dan spasi sesedikit mungkin (tanda ? setelah +), sehingga berhenti tepat sebelum " @".
Jalankan contoh kode di pelajaran ini tanpa instalasi lewat compiler Python online.