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.

python
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.

python
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.

python
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.

python
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.

python
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!