
Setiap programmer yang berurusan dengan sistem keuangan tahu bahwa data mentah dari bank seringkali adalah mimpi buruk. Laporan transaksi BCA dalam format teks (.txt) adalah contoh klasiknya: serangkaian data mentah yang tidak terstruktur. Barisan angka, tanggal, dan deskripsi bercampur aduk, menantang upaya parsing otomatis. Daripada membuang waktu dengan string manipulation manual, kita punya solusi yang lebih elegan dan kuat: Regular Expression (Regex).
Saya akan membedah dua pola Regex spesifik yang dirancang untuk mengatasi format log BCA, mengubah data yang tadinya unstructured menjadi structured hanya dalam satu baris kode.
Pola 1: Untuk Ringkasan Harian atau Per Tanggal
Pola ini ideal jika Anda ingin mengekstrak baris ringkasan yang biasanya muncul pada laporan, yang mungkin mencantumkan saldo mutasi per hari.
/^\s+(\d+)\s+(\d+)(.+?)IDR\s+([\d,.]+)\s+(\d+\/\d+\/\d+)\s+(\d+:\d+:\d+)\s+(\w+)(.*)/is
Perhatikan poin-poin teknis berikut pada Grup Penangkapan (Capturing Group):
^\s+
: Menangani leading whitespace yang seringkali tidak konsisten.(.+?)IDR
(Grup 3): Ini adalah trik non-greedy. Grup ini menangkap Deskripsi hingga ia bertemu literal stringIDR
, memastikan ia tidak menelan seluruh sisa baris.([\d,.]+)
(Grup 4): Secara eksplisit menangkap Jumlah Mutasi. Pola ini mengakomodasi digit, koma, dan titik.- Flags
/is
sangat krusial!i
(case-insensitive) memastikan pencocokan berhasil terlepas dari apakahIDR
ditulis dalam huruf besar atau kecil.
Pola 2: Untuk Detail Transaksi Per Baris
Pola kedua ini lebih kompleks dan dirancang untuk memecah setiap baris detail transaksi, yang memiliki lebih banyak kolom dan seringkali memisahkan kolom Debet/Kredit.
/^(\d+)\s+(\d*)-(.+?)\s+(\d+)\s+(.+?)IDR\s+([\d,.]+)\s+([\d,.]+)\s+(\d+\/\d+\/\d+)\s+(\d+:\d+:\d+)\s+(.*)/is
Kesulitan yang dipecahkan oleh pola ini:
(\d*)-(.+?)
(Grup 2 & 3): Mengatasi format kode yang terpisah tanda hubung, seperti Kode Cabang dan Jenis Transaksi.- Dua Grup Mutasi Berurutan:
([\d,.]+)\s+([\d,.]+)
(Grup 6 & 7): Ini adalah kunci untuk parsing laporan bank yang menggunakan dua kolom terpisah untuk Jumlah Debet dan Jumlah Kredit. Ini adalah pendekatan robust. (.*)
(Grup 10): Menangkap Sisa Baris di akhir, yang seringkali berisi nomor referensi atau detail lain yang tidak terstruktur.
Sebagai developer, jangan pernah hardcode logika parsing Anda berdasarkan posisi karakter. Formatnya rentan berubah, dan whitespace sering tidak konsisten. Sebaliknya, andalkan Regex yang kuat ini. Pahami setiap grup penangkapan, dan Anda akan mengubah proses data ingestion dari pengerjaan yang melelahkan menjadi operasi Regex yang mulus dan cepat.
Posting Komentar