Learn
← Previous Next →

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