← Kembali

Python Pemula Parsing

Parse string rupiah ke integer di Python

Konversi 'Rp 1.500.000,00' atau 'Rp1.5jt' menjadi integer 1500000. Handle pemisah ribuan titik, koma desimal, dan singkatan jt/rb.

Dipublikasikan 28 Mei 2026

Data harga produk dari berbagai sumber — Tokopedia, Shopee, marketplace lokal — sering datang dalam format string yang tidak konsisten: "Rp 1.500.000", "Rp1,5jt", "1.5 juta", "Rp 750rb". Snippet ini membersihkan dan mengembalikan integer.

Kode

import re

def parse_rupiah(s: str) -> int:
    """Parse Indonesian rupiah string ke integer (dalam rupiah).
    
    Handle: 'Rp 1.500.000', 'Rp1.5jt', '750rb', '1,5 juta'.
    Return: integer dalam rupiah.
    Raise: ValueError jika tidak bisa di-parse.
    """
    if not s:
        raise ValueError("Empty string")
    
    s = s.lower().strip()
    s = re.sub(r"^rp\.?\s*", "", s)  # buang prefix "Rp" / "Rp."
    s = re.sub(r"\s+", "", s)          # buang spasi
    
    # Cek suffix singkatan
    multiplier = 1
    if s.endswith("jt") or s.endswith("juta"):
        multiplier = 1_000_000
        s = re.sub(r"(jt|juta)$", "", s)
    elif s.endswith("rb") or s.endswith("ribu") or s.endswith("k"):
        multiplier = 1_000
        s = re.sub(r"(rb|ribu|k)$", "", s)
    elif s.endswith("m") or s.endswith("milyar") or s.endswith("miliar"):
        multiplier = 1_000_000_000
        s = re.sub(r"(m|milyar|miliar)$", "", s)
    
    # Format Indonesia: titik = ribuan, koma = desimal
    # Konversi ke format Python: hilangkan titik, ganti koma jadi titik
    if "," in s:
        # Ada koma — anggap sebagai desimal
        s = s.replace(".", "").replace(",", ".")
    else:
        # Tidak ada koma — titik = pemisah ribuan
        s = s.replace(".", "")
    
    try:
        value = float(s) * multiplier
        return int(value)
    except ValueError:
        raise ValueError(f"Tidak bisa parse: {s!r}")

Kapan dipakai

Saat scraping harga dari marketplace, ETL pipeline yang baca data spreadsheet manual, atau saat normalisasi input dari user di form admin.

Contoh pemakaian

parse_rupiah("Rp 1.500.000")       # 1500000
parse_rupiah("Rp1.5jt")            # 1500000
parse_rupiah("750rb")              # 750000
parse_rupiah("1,5 juta")           # 1500000
parse_rupiah("Rp 12.345,67")       # 12345 (desimal dipotong oleh int())
parse_rupiah("2.5 milyar")         # 2500000000

Catatan

  • Fungsi ini lossy untuk format dengan desimal — karena rupiah tidak pakai sen, hasil akhirnya integer dan desimal dibuang oleh int(). Kalau butuh presisi sen, ubah return type ke Decimal.
  • Tidak validasi kalau string-nya ambigu seperti "1,000" (di Indonesia = 1, di US = 1000). Asumsi: input adalah format Indonesia.
  • Untuk parsing dari OCR atau text yang sangat berantakan, tambahkan validasi range setelah parse — misal: kalau hasil > 100 milyar, kemungkinan parsing salah.

Jangan dipakai untuk transaksi finansial sebenarnya — itu butuh decimal arithmetic dan handling banking-grade. Snippet ini hanya untuk display, analisis, dan ETL.

# tags

rupiahindonesiaformat-uangregex

← Semua snippet Snippet Python lain →