Regular Expression — atau yang akrab disebut regex — adalah salah satu kemampuan paling berguna yang wajib dikuasai setiap programmer. Dengan regex, kamu bisa mencari pola teks, memvalidasi input pengguna, sampai membersihkan data berantakan hanya dalam satu baris kode. Kalau kamu baru mulai belajar Python dan belum menyiapkan environment, pastikan dulu kamu sudah mengikuti cara install Python dan menulis program pertamamu. Di artikel ini kita akan membedah modul re dari nol sampai kamu mahir membuat pola sendiri.
Apa Itu Regular Expression?
Regular Expression adalah bahasa mini untuk mendeskripsikan pola teks. Alih-alih menulis logika perbandingan karakter satu per satu, kamu cukup menulis satu pola seperti \d{4}-\d{2}-\d{2} untuk mencocokkan format tanggal. Hampir semua bahasa pemrograman punya dukungan regex, dan di Python semua fungsinya ada di modul bawaan bernama re — tidak perlu install apa pun.
Persiapan: Modul re dan Raw String
Python menyediakan modul re sebagai bagian dari standard library. Sebelum menulis pola, ada satu kebiasaan penting: selalu gunakan raw string (awalan r) untuk pola regex, misalnya r"\d+". Raw string mencegah backslash diproses dua kali, sehingga pola lebih mudah dibaca dan terhindar dari bug yang membingungkan.
import re
teks = "Harga promo: Rp 15.000, diskon 10%"
# Mencari kecocokan pertama di mana pun posisinya
hasil = re.search(r"\d{2,3}\.\d{3}", teks)
print(hasil.group()) # 15.000
Fungsi-Fungsi Dasar Modul re
Modul re punya beberapa fungsi inti yang dipakai terus-menerus. Mari kita bedah satu per satu dengan contoh singkat.
re.search() mencari pola di mana pun dalam string, re.match() hanya memeriksa di awal string, dan re.fullmatch() menuntut seluruh string cocok dari awal sampai akhir. Untuk validasi input seperti email atau nomor telepon, fullmatch adalah pilihan paling aman.
import re
# findall: mengambil semua kecocokan sebagai list
teks = "Ada 3 kucing, 12 anjing, dan 47 burung."
angka = re.findall(r"\d+", teks)
print(angka) # ['3', '12', '47']
# split: memecah string berdasarkan pola
buah = re.split(r"[,\s;]+", "apel, pisang; jeruk mangga")
print(buah) # ['apel', 'pisang', 'jeruk', 'mangga']
# sub: mengganti pola dengan teks lain
rahasia = re.sub(r"\d", "X", "PIN saya 1234")
print(rahasia) # PIN saya XXXX
Anatomi Pola Regex
Pola regex tersusun dari beberapa blok penyusun: literal (karakter biasa), character class, quantifier, anchor, dan group. Memahami lima blok ini akan membuatmu bisa membaca (dan menulis) pola apa pun.
import re
# Character class: \d digit, \w alfanumerik, \s whitespace
print(re.findall(r"\d+", "tanggal 05/09/2026"))
# ['05', '09', '2026']
# Custom class [aeiou] = huruf vokal
print(re.findall(r"[aeiou]", "bengkel kode"))
# ['e', 'e', 'o', 'e']
# Quantifier: * (0+), + (1+), ? (0/1), {n}, {m,n}
print(re.findall(r"\d{2,4}", "tahun 2026 dan 45"))
# ['2026', '45']
# Anchor: ^ awal string, $ akhir string
print(bool(re.search(r"^halo", "halo dunia"))) # True
print(bool(re.search(r"dunia$", "halo dunia"))) # True
Group dan Named Group
Group (tanda kurung ()) punya dua fungsi: mengelompokkan bagian pola dan menangkap bagian yang cocok. Dengan named group (?P<nama>), kamu bisa mengambil hasil berdasarkan nama alih-alih indeks — jauh lebih mudah dibaca.
import re
log = '2026-09-05 10:23:41 INFO [main] User "budi" login sukses dari 192.168.1.10'
pola = re.compile(
r'(?P<waktu>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}) '
r'(?P<level>\w+) '
r'\[(?P<komponen>\w+)\] '
r'User "(?P<user>\w+)" '
r'(?P<pesan>.+) dari '
r'(?P<ip>\d{1,3}(?:\.\d{1,3}){3})'
)
m = pola.search(log)
if m:
print(m.group("waktu")) # 2026-09-05 10:23:41
print(m.group("level")) # INFO
print(m.group("user")) # budi
print(m.group("ip")) # 192.168.1.10
Pola yang Sering Digunakan (Validasi Input)
Berikut kumpulan pola siap pakai untuk validasi data yang paling sering muncul di aplikasi nyata — email, nomor telepon Indonesia, dan format tanggal. Pola-pola ini bisa langsung kamu salin ke proyekmu.
import re
EMAIL = r"^[\w.+-]+@[\w-]+\.[\w.-]+$"
TELEPON = r"^(\+62|62|0)8[1-9][0-9]{6,10}$"
TANGGAL = r"^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$"
def valid(pola, nilai):
return re.fullmatch(pola, nilai) is not None
print(valid(EMAIL, "andi.pratama@gmail.com")) # True
print(valid(EMAIL, "bukan-email")) # False
print(valid(TELEPON, "081234567890")) # True
print(valid(TANGGAL, "2026-09-05")) # True
print(valid(TANGGAL, "2026-13-40")) # False
Hati-hati dengan catastrophic backtracking. Pola yang menggunakan quantifier bersarang seperti (a+)+b bisa membuat program hang saat menemukan string yang hampir cocok namun gagal, karena mesin regex mencoba jutaan kombinasi. Selalu hindari quantifier di dalam quantifier, dan gunakan re.fullmatch() alih-alih re.search() untuk validasi penuh.
Contoh Nyata: Membersihkan Data
Di dunia nyata, regex paling sering dipakai untuk membersihkan data. Misalnya saat kamu mengambil data dari halaman web dengan web scraping menggunakan BeautifulSoup, hasilnya sering masih kotor — ada tag sisa, spasi ganda, atau karakter yang tidak diinginkan. Berikut cara merapikannya dengan re.sub.
import re
data = " Harga Laptop: Rp 12.500.000 (diskon 10%)!! "
# Hapus spasi berlebih (2+ jadi 1) lalu trim
rapi = re.sub(r"\s{2,}", " ", data).strip()
print(rapi) # Harga Laptop: Rp 12.500.000 (diskon 10%)!!
# Ambil angka beserta titiknya saja
harga = re.findall(r"\d[\d.]*", rapi)
print(harga) # ['12.500.000', '10']
# Buang karakter non-alfanumerik (kecuali spasi)
bersih = re.sub(r"[^\w\s]", "", rapi)
print(bersih) # Harga Laptop Rp 12500000 diskon 10
Teknik yang sama juga sangat berguna saat bekerja dengan pandas untuk analisis data — misalnya dengan df["kolom"].str.contains(r"pola") untuk memfilter baris yang cocok dengan pola tertentu, atau str.replace(r"pola", "", regex=True) untuk membersihkan kolom teks.
Gunakan re.compile() untuk pola yang dipakai berulang. Mengompilasi pola sekali lalu memanggil metodenya berkali-kali lebih cepat daripada memanggil fungsi modul re langsung di dalam loop, dan membuat kode lebih rapi.
Kesimpulan
Regular Expression adalah alat yang ampuh untuk mencari, memvalidasi, dan membersihkan teks — dan modul re di Python membuatnya mudah diakses tanpa library tambahan. Mulailah dari pola sederhana seperti \d+ dan \w+, biasakan memakai raw string, lalu tingkatkan ke named group dan re.compile(). Semakin sering kamu berlatih, semakin cepat kamu membaca pola rumit. Selamat mencoba, dan jangan lupa selalu uji pola kamu dengan data nyata!