Bagaimana cara mengekstrak Angka dengan benar dari String menggunakan regex di Python?

Ekstraksi angka dari string adalah tugas umum dalam pemrosesan data dan analisis teks. Seringkali, data yang kita miliki mengandung angka yang tersembunyi di dalam teks yang lebih besar. Python, dengan modul re (regex atau regular expression), menyediakan alat yang ampuh untuk mengekstrak angka-angka ini secara efisien dan akurat. Artikel ini akan membahas berbagai teknik dan pertimbangan penting dalam mengekstrak angka dari string menggunakan regex di Python.

Mengapa Regex untuk Ekstraksi Angka?

Regex menawarkan beberapa keunggulan dibandingkan metode ekstraksi angka lainnya:

  • Fleksibilitas: Regex dapat menangani berbagai format angka, termasuk bilangan bulat, bilangan desimal, angka dengan pemisah ribuan, angka dengan tanda plus atau minus, dan bahkan angka dalam notasi ilmiah.
  • Presisi: Regex memungkinkan kita untuk menentukan pola yang tepat untuk angka yang ingin kita ekstrak, sehingga mengurangi risiko kesalahan dan ambiguitas.
  • Efisiensi: Modul re di Python dioptimalkan untuk kinerja, memungkinkan ekstraksi angka yang cepat bahkan dari string yang besar.
  • Kemampuan Adaptasi: Regex dapat dengan mudah diubah dan disesuaikan untuk menangani kasus-kasus khusus atau format angka yang tidak standar.

Dasar-Dasar Regex untuk Ekstraksi Angka

Bagaimana cara mengekstrak Angka dengan benar dari String menggunakan regex di Python? 1

Sebelum kita menyelami teknik yang lebih kompleks, mari kita bahas beberapa elemen dasar regex yang relevan untuk ekstraksi angka:

  • \d: Mencocokkan digit tunggal (0-9).
  • +: Mencocokkan satu atau lebih kemunculan karakter atau grup sebelumnya.
  • *: Mencocokkan nol atau lebih kemunculan karakter atau grup sebelumnya.
  • ?: Mencocokkan nol atau satu kemunculan karakter atau grup sebelumnya (opsional).
  • .: Mencocokkan karakter apa pun (kecuali baris baru).
  • \.: Mencocokkan karakter titik literal.
  • []: Mendefinisikan set karakter. Misalnya, [0-9] sama dengan \d.
  • (): Membuat grup penangkap. Bagian dari string yang cocok dengan grup ini dapat diekstrak secara terpisah.
  • ^: Mencocokkan awal string.
  • $: Mencocokkan akhir string.
  • |: Operator "atau".
  • \-: Mencocokkan karakter minus literal.
  • \+: Mencocokkan karakter plus literal.

Dengan memahami elemen-elemen ini, kita dapat membangun pola regex yang efektif untuk mengekstrak angka dari string.

Contoh Sederhana: Mengekstrak Bilangan Bulat

Untuk memulai, mari kita lihat contoh sederhana untuk mengekstrak bilangan bulat dari string:

import re string = "Terdapat 12 apel dan 3 jeruk di keranjang." pola = r"\d+"  # Mencari satu atau lebih digit angka = re.findall(pola, string) print(angka)  # Output: ['12', '3'] 

Dalam contoh ini, pola \d+ mencari satu atau lebih digit berturut-turut. Fungsi re.findall() mengembalikan daftar semua string yang cocok dengan pola tersebut.

Teknik Tingkat Lanjut untuk Ekstraksi Angka

Bagaimana cara mengekstrak Angka dengan benar dari String menggunakan regex di Python? 2

Setelah memahami dasar-dasarnya, mari kita eksplorasi teknik yang lebih canggih untuk menangani kasus-kasus yang lebih kompleks:

1. Mengekstrak Bilangan Desimal

Untuk mengekstrak bilangan desimal, kita perlu memperhitungkan karakter titik (.) sebagai pemisah desimal. Pola regex yang sesuai adalah:

import re string = "Harga barang adalah Rp 12.500,75." pola = r"\d+\.\d+"  # Mencari satu atau lebih digit, diikuti titik, diikuti satu atau lebih digit angka = re.findall(pola, string) print(angka)  # Output: ['12.500'] 

Perhatikan bahwa kita menggunakan \. untuk mencocokkan titik literal, karena . tanpa escape memiliki arti khusus dalam regex (mencocokkan karakter apa pun).

2. Menangani Angka dengan Pemisah Ribuan

Di banyak negara, angka menggunakan pemisah ribuan (misalnya, koma atau titik). Untuk mengekstrak angka dengan pemisah ribuan, kita dapat menggunakan pola yang lebih kompleks:

import re string = "Jumlah penduduk adalah 1.234.567 orang." pola = r"\d{1,3}(?:\.\d{3})+" #Mencari satu hingga tiga digit diikuti nol atau lebih grup pemisah ribuan (titik diikuti tiga digit). angka = re.findall(pola, string) print(angka)  # Output: ['1.234.567'] 

Dalam pola ini:

  • \d{1,3}: Mencari satu hingga tiga digit.
  • (?:\.\d{3})+: Mencari satu atau lebih kemunculan grup non-penangkap yang terdiri dari titik diikuti oleh tiga digit. (?:...) digunakan untuk membuat grup non-penangkap, yang berarti bahwa grup tersebut tidak akan diekstrak sebagai bagian terpisah dari hasil.

3. Mengekstrak Angka Negatif dan Positif

Untuk mengekstrak angka negatif dan positif, kita perlu memperhitungkan tanda plus (+) atau minus (-) di depan angka. Pola regex yang sesuai adalah:

import re string = "Suhu hari ini adalah -5 derajat Celcius, kemarin +2 derajat." pola = r"[+-]?\d+\.?\d*"  # Mencari opsional plus atau minus, diikuti satu atau lebih digit, opsional titik, diikuti nol atau lebih digit. angka = re.findall(pola, string) print(angka)  # Output: ['-5', '+2'] 

Dalam pola ini:

  • [+-]?: Mencari opsional tanda plus atau minus.

4. Mengekstrak Angka dalam Notasi Ilmiah

Angka dalam notasi ilmiah (misalnya, 1.23e+05) dapat diekstrak dengan pola yang lebih kompleks:

import re string = "Jaraknya adalah 1.23e+05 meter." pola = r"[+-]?\d+\.?\d*[eE][+-]?\d+" #Mencari opsional plus atau minus, diikuti satu atau lebih digit, opsional titik, diikuti nol atau lebih digit, diikuti e atau E, diikuti opsional plus atau minus, diikuti satu atau lebih digit. angka = re.findall(pola, string) print(angka)  # Output: ['1.23e+05'] 

Pola ini mencakup bagian eksponen (e atau E) dan tanda plus atau minus opsional di dalam eksponen.

5. Menggunakan Grup Penangkap untuk Ekstraksi Selektif

Terkadang, kita hanya ingin mengekstrak bagian tertentu dari angka. Misalnya, kita mungkin ingin mengekstrak hanya bagian desimal dari bilangan desimal. Dalam kasus ini, kita dapat menggunakan grup penangkap:

import re string = "Harga barang adalah Rp 12.500,75." pola = r"\d+\.(?P<desimal>\d+)"  # Membuat grup bernama "desimal" untuk bagian desimal match = re.search(pola, string) if match:     desimal = match.group("desimal")     print(desimal)  # Output: 75 

Dalam contoh ini, kita menggunakan (?P<desimal>\d+) untuk membuat grup bernama "desimal" yang menangkap bagian desimal dari angka. Fungsi re.search() mengembalikan objek match jika pola ditemukan. Kita kemudian dapat menggunakan match.group("desimal") untuk mengakses bagian yang ditangkap.

Studi Kasus: Analisis Data Penjualan

Bagaimana cara mengekstrak Angka dengan benar dari String menggunakan regex di Python? 3

Mari kita terapkan teknik-teknik yang telah kita pelajari dalam studi kasus yang lebih realistis: analisis data penjualan. Misalkan kita memiliki data penjualan dalam format berikut:

ID Produk: A123, Penjualan: Rp 1.250.000, Diskon: 10% ID Produk: B456, Penjualan: Rp 2.750.500, Diskon: 5% ID Produk: C789, Penjualan: Rp 500.000, Diskon: 20% 

Kita ingin mengekstrak informasi berikut dari data ini:

  • ID Produk
  • Jumlah Penjualan
  • Persentase Diskon

Berikut adalah kode Python yang melakukan ekstraksi ini:

import re data = """ ID Produk: A123, Penjualan: Rp 1.250.000, Diskon: 10% ID Produk: B456, Penjualan: Rp 2.750.500, Diskon: 5% ID Produk: C789, Penjualan: Rp 500.000, Diskon: 20% """ # Membagi data menjadi baris-baris baris = data.strip().split("\n") # Membuat list untuk menyimpan hasil hasil = [] # Iterasi melalui setiap baris for baris in baris:     # Mengekstrak ID Produk     match_id = re.search(r"ID Produk: (\w+)", baris)     id_produk = match_id.group(1) if match_id else None     # Mengekstrak Jumlah Penjualan     match_penjualan = re.search(r"Penjualan: Rp ([\d.]+)", baris)     penjualan = match_penjualan.group(1) if match_penjualan else None     if penjualan:       penjualan = penjualan.replace('.','') # Menghilangkan titik ribuan       penjualan = int(penjualan) #Konversi ke integer     # Mengekstrak Persentase Diskon     match_diskon = re.search(r"Diskon: (\d+)%", baris)     diskon = match_diskon.group(1) if match_diskon else None     if diskon:         diskon = int(diskon)     # Menambahkan hasil ke list     hasil.append({         "ID Produk": id_produk,         "Penjualan": penjualan,         "Diskon": diskon     }) # Menampilkan hasil for item in hasil:     print(item) 

Kode ini menggunakan regex untuk mengekstrak informasi yang relevan dari setiap baris data. Hasilnya disimpan dalam list dictionary, yang kemudian dapat digunakan untuk analisis lebih lanjut.

Validasi Data dan Penanganan Kesalahan

Penting untuk diingat bahwa ekstraksi angka dari string tidak selalu sempurna. Data mungkin mengandung kesalahan atau format yang tidak terduga. Oleh karena itu, penting untuk melakukan validasi data dan menangani kesalahan dengan baik.

Berikut adalah beberapa teknik validasi dan penanganan kesalahan yang dapat digunakan:

  • Memeriksa keberadaan kecocokan: Sebelum mencoba mengakses grup penangkap, pastikan bahwa pola regex benar-benar cocok dengan string. Gunakan if match: untuk memeriksa apakah re.search() mengembalikan objek match yang valid.
  • Menangani pengecualian: Jika Anda mencoba mengonversi string yang diekstrak menjadi angka, gunakan blok try...except untuk menangani pengecualian yang mungkin terjadi (misalnya, ValueError jika string tidak dapat dikonversi menjadi angka).
  • Menggunakan fungsi validasi: Buat fungsi validasi khusus untuk memverifikasi bahwa angka yang diekstrak berada dalam rentang yang diharapkan atau memenuhi kriteria lain.
  • Membersihkan data: Sebelum melakukan ekstraksi, bersihkan data dengan menghapus karakter yang tidak diinginkan atau menstandarisasi format angka.

Perbandingan Performa: Regex vs. Metode String Tradisional

Sebagai perbandingan, mari kita tinjau performa ekstraksi data menggunakan Regex vs. metode String tradisional.

Metode Kelebihan Kekurangan Kasus Penggunaan Terbaik
Regex Fleksibel, efisien untuk pola kompleks, mudah diadaptasi untuk berbagai format Bisa lebih lambat untuk pola sederhana, kurva belajar yang curam untuk pola kompleks Ekstraksi angka dari string dengan pola yang kompleks, format yang bervariasi, atau kebutuhan validasi
String Tradisional Lebih cepat untuk pola sederhana, lebih mudah dibaca dan dipahami Kurang fleksibel, sulit menangani pola kompleks, membutuhkan lebih banyak kode untuk validasi Ekstraksi angka dari string dengan pola yang sangat sederhana dan format yang konsisten

Analisis Teknis:

  • Regex: Menggunakan finite state machine untuk pencocokan pola. Meskipun efisien untuk pola yang kompleks, overhead inisialisasi dan kompilasi pola dapat membuatnya lebih lambat untuk pola yang sangat sederhana.
  • String Tradisional: Menggunakan operasi string bawaan seperti split(), replace(), dan isdigit(). Operasi ini umumnya lebih cepat untuk pola sederhana karena tidak ada overhead kompilasi pola.

Contoh Kode Perbandingan:

Regex:

import re import time string = "Harga barang adalah Rp 1.250.000,75." pola = r"([\d.]+)" start_time = time.time() for _ in range(10000):     angka = re.findall(pola, string) end_time = time.time() print(f"Waktu eksekusi Regex: {end_time - start_time} detik") # Output akan bervariasi 

String Tradisional:

import time string = "Harga barang adalah Rp 1.250.000,75." start_time = time.time() for _ in range(10000):     parts = string.split("Rp ")     if len(parts) > 1:         angka = parts[1].replace(".","").replace(",",".").strip() #Bersihkan data     else:         angka = None end_time = time.time() print(f"Waktu eksekusi String Tradisional: {end_time - start_time} detik") # Output akan bervariasi 

Kesimpulan:

Pilihan antara Regex dan metode String tradisional tergantung pada kompleksitas pola dan kebutuhan performa. Untuk pola sederhana dan format yang konsisten, metode String tradisional mungkin lebih cepat. Namun, untuk pola yang kompleks dan format yang bervariasi, Regex menawarkan fleksibilitas dan efisiensi yang lebih baik. Penting untuk mengukur performa kedua metode pada data Anda sendiri untuk membuat keputusan yang tepat.

Kesimpulan

Ekstraksi angka dari string menggunakan regex di Python adalah teknik yang ampuh dan fleksibel. Dengan memahami dasar-dasar regex dan teknik-teknik tingkat lanjut, Anda dapat mengekstrak angka dari berbagai format string dengan akurat dan efisien. Ingatlah untuk selalu melakukan validasi data dan menangani kesalahan dengan baik untuk memastikan kualitas data Anda. Dengan mempertimbangkan tradeoff antara Regex dan metode String tradisional, Anda dapat memilih pendekatan yang paling sesuai dengan kebutuhan Anda.

Related Posts

Bagaimana cara mengekstrak hanya nilai unik dari string menggunakan regex di Python? 3

Bagaimana cara mengekstrak hanya nilai unik dari string menggunakan regex di Python?

Regex (Regular Expression) adalah alat yang sangat ampuh untuk manipulasi string. Dalam Python, modul re menyediakan fungsionalitas regex. Salah satu kasus penggunaan yang umum adalah mengekstrak informasi spesifik dari string…

Read more
Bagaimana cara mengatur regex GTM untuk tampilan halaman 3

Bagaimana cara mengatur regex GTM untuk tampilan halaman

Google Tag Manager (GTM) adalah alat powerfull yang memungkinkan Anda untuk mengelola dan menerapkan tag pelacakan dan snippet kode lainnya di situs web Anda tanpa harus mengubah kode sumber secara…

Read more
Bagaimana cara mengabaikan titik(.) dengan regex dari input [Duplikat] 3

Bagaimana cara mengabaikan titik(.) dengan regex dari input [Duplikat]

Regular Expression (Regex) adalah alat yang sangat ampuh dalam manipulasi teks dan pencarian pola. Kemampuannya untuk mendefinisikan pola kompleks dan mencocokkannya dengan string memungkinkan kita untuk melakukan validasi data, ekstraksi…

Read more
Bagaimana cara mengabaikan huruf besar tetapi bukan diakritik dengan regex Python? 3

Bagaimana cara mengabaikan huruf besar tetapi bukan diakritik dengan regex Python?

Regular expression (regex) adalah alat yang sangat ampuh untuk manipulasi dan pencarian teks. Dalam Python, modul re menyediakan fungsionalitas regex yang luas. Salah satu kebutuhan umum dalam pemrosesan teks adalah…

Read more

Bagaimana cara mendapatkan karakter khusus terakhir dari UDF dengan regex di PySpark?

PySpark, sebagai API Python untuk Apache Spark, menyediakan kerangka kerja yang kuat untuk pemrosesan data terdistribusi. Salah satu fitur pentingnya adalah User-Defined Functions (UDF), yang memungkinkan pengguna untuk memperluas fungsionalitas…

Read more
Bagaimana cara mencocokkan keempat kasus dalam Regex? 3

Bagaimana cara mencocokkan keempat kasus dalam Regex?

Regular Expression (Regex) adalah alat yang sangat ampuh untuk manipulasi teks, pencarian pola, dan validasi data. Salah satu aspek krusial dalam Regex adalah kemampuan untuk mengendalikan bagaimana kasus (huruf besar…

Read more

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *