Hari 24: Regular Expression (re)
60 min
Last updated 26 Mar 2026
Apa itu Regex?
Regular Expression adalah pola teks untuk mencari, mencocokkan, dan memanipulasi string secara powerful.
Fungsi Utama re
import re
teks = "Harga produk: Rp 150.000 dan Rp 2.500.000"
# re.search() — cari pertama kali, kembalikan Match object
m = re.search(r"\d+", teks)
print(m.group()) # 150
# re.findall() — semua kecocokan sebagai list
angka = re.findall(r"\d+", teks)
print(angka) # ['150', '000', '2', '500', '000']
# re.match() — hanya cocokkan di AWAL string
m = re.match(r"Harga", teks)
print(bool(m)) # True
# re.fullmatch() — harus cocok SELURUHNYA
m = re.fullmatch(r"\d{5}", "12345")
print(bool(m)) # True
# re.sub() — ganti kecocokan
bersih = re.sub(r"\s+", " ", "teks dengan spasi banyak")
print(bersih) # teks dengan spasi banyak
# re.split() — pecah berdasarkan pola
bagian = re.split(r"[,;]\s*", "satu, dua; tiga,empat")
print(bagian) # ['satu', 'dua', 'tiga', 'empat']
Pola Regex Penting
# Karakter
# . — sembarang karakter (kecuali newline)
# \d — digit [0-9]
# \D — bukan digit
# \w — word character [a-zA-Z0-9_]
# \W — bukan word character
# \s — whitespace (spasi, tab, newline)
# \S — bukan whitespace
# Kuantifier
# * — 0 atau lebih
# + — 1 atau lebih
# ? — 0 atau 1 (opsional)
# {n} — tepat n kali
# {n,m} — antara n dan m kali
# Anchors
# ^ — awal string
# $ — akhir string
# \b — word boundary
# Group & Set
# [abc] — a atau b atau c
# [^abc]— bukan a/b/c
# (abc) — capturing group
# a|b — a atau b
Contoh Pola Nyata
import re
def validasi_email(email):
pola = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
return bool(re.match(pola, email))
def validasi_telepon(no):
pola = r"^(\+62|0)[0-9]{9,12}$"
return bool(re.match(pola, no))
def ekstrak_harga(teks):
# Cocokkan Rp 1.000 atau Rp 1.000.000
pola = r"Rp\s*[\d.]+"
return re.findall(pola, teks)
print(validasi_email("budi@email.com")) # True
print(validasi_email("bukan_email")) # False
print(validasi_telepon("081234567890")) # True
print(ekstrak_harga("Baju Rp 150.000, Celana Rp 250.000"))
Named Groups & re.compile
import re
# Compile pola untuk performa lebih baik
pola_tgl = re.compile(r"(?P\d{2})/(?P\d{2})/(?P\d{4})")
teks = "Acara pada 17/08/1945 dan 25/03/2026"
for m in pola_tgl.finditer(teks):
print(f"Hari={m.group('hari')}, Bulan={m.group('bln')}, Tahun={m.group('thn')}") Assignment
Buat program pembersih dan validator data kontak. Input: list string mentah. Ekstrak nama, email, dan nomor telepon menggunakan regex. Tandai data yang tidak valid.
Expected output:
Nama Email Telepon Status
---------------------------------------------------------------------------
Budi Santoso budi@email.com 081234567890 ✓ Valid
Ani Wijaya None None ✗ Tidak Valid
Citra Dewi citra@yahoo.co.id +6281111222333 ✓ Valid
Doni None None ✗ Tidak Valid
Eva Susanti eva@company.org 087654321098 ✓ Valid
PY
main.py
Solution
Output