Ekspresi Reguler dengan Python [Dengan Contoh]: Bagaimana Cara Menerapkannya?
Diterbitkan: 2021-01-29Saat memproses data mentah dari sumber mana pun, penggalian informasi yang tepat adalah penting agar wawasan yang berarti dapat diperoleh dari data tersebut. Terkadang menjadi sulit untuk mengambil pola spesifik dari data terutama dalam hal data tekstual.
Data tekstual terdiri dari paragraf informasi yang dikumpulkan melalui formulir survei, situs web scrapping, dan sumber lainnya. Penyaluran pengakses string yang berbeda dengan fungsi pandas atau fungsi khusus lainnya dapat menyelesaikan pekerjaan, tetapi bagaimana jika pola yang lebih spesifik perlu diperoleh? Ekspresi reguler melakukan pekerjaan ini dengan mudah.
Daftar isi
Apa itu Ekspresi Reguler (RegEx)?
Ekspresi reguler adalah representasi dari sekumpulan karakter untuk string. Ini menyajikan formula umum untuk pola tertentu dalam string yang membantu dalam memisahkan informasi yang benar dari kumpulan data. Ekspresi biasanya terdiri dari simbol atau karakter yang membantu dalam membentuk aturan tetapi, pada pandangan pertama, mungkin tampak aneh dan sulit untuk dipahami. Simbol-simbol ini memiliki arti terkait yang dijelaskan di sini.
Pelajari kursus ilmu data dari Universitas top dunia. Dapatkan Program PG Eksekutif, Program Sertifikat Tingkat Lanjut, atau Program Magister untuk mempercepat karier Anda.
Meta-karakter di RegEx
- '.': adalah wildcard, cocok dengan satu karakter (karakter apa saja, tetapi hanya sekali)
- ^: menunjukkan awal dari string
- $: menunjukkan akhir dari string
- [ ]: cocok dengan salah satu set karakter dalam [ ]
- [az]: cocok dengan salah satu rentang karakter a,b,…,z
- [^abc] : cocok dengan karakter yang bukan a,b atau c.
- a|b: cocok dengan a atau b, di mana a dan b adalah string
- () : menyediakan pelingkupan untuk operator
- \ : memungkinkan pelarian untuk karakter khusus (\t, \n, \b, \.)
- \b: cocok dengan batas kata
- \d : digit apa saja, setara dengan [0-9]
- \D: non digit apa pun, setara dengan [^0-9]
- \s : sembarang spasi, setara dengan [ \t\n\r\f\v]
- \S : sembarang non-spasi, setara dengan [^\t\n\r\f\v]
- \w : alfanumerik apa pun, setara dengan [a-zA-Z0-9_]
- \W : semua non-alfanumerik, setara dengan [^a-zA-Z0-9_]
- '*': cocok dengan nol atau lebih kejadian
- '+': cocok dengan satu atau lebih kejadian
- '?': cocok dengan nol atau satu kejadian
- {n}: tepat n pengulangan, n>=0
- {n,}: setidaknya n pengulangan
- {,n}: paling banyak n pengulangan
- {m,n}: paling sedikit m pengulangan dan paling banyak n pengulangan
Contoh untuk Memahami Solusinya
Sekarang setelah Anda mengetahui karakter yang membentuk RegEx, mari kita lihat cara kerjanya:
1. Penyaringan Email:
Misalkan Anda ingin memfilter semua id email dari paragraf yang panjang. Format umum untuk email adalah:
namapengguna@nama_domain. <domain_level_top>
Nama pengguna dapat berupa alfanumerik, dan oleh karena itu, kita dapat menggunakan \w untuk menunjukkannya tetapi ada kemungkinan bahwa pengguna membuat akun sebagai namadepan.nama belakang. Untuk mengatasi ini, kita akan keluar dari titik dan membuat satu set karakter. Selanjutnya, domain_name seharusnya hanya abjad dan oleh karena itu, A-Za-z akan menunjukkan itu. Domain tingkat atas biasanya .com, .in, .org tetapi tergantung pada kasus penggunaan, Anda dapat memilih seluruh rentang alfabet atau memfilter domain tertentu.
Ekspresi reguler ini akan terlihat seperti ini:
^([a-zA-Z0-9_.]+)@([a-zA-Z0-9-]+)\.([a-zA-Z]{2,4})$
Di sini awal dan akhir pola juga dideklarasikan serta domain tingkat atas hanya dapat berisi 2-4 karakter. Seluruh ekspresi memiliki 3 grup.
2. Penyaringan Tanggal:
Informasi tekstual yang Anda ekstrak mungkin berisi tanggal dan tidak ada kolom terpisah yang tersedia untuk Anda. Tanggal merupakan faktor penting yang membantu dalam menyaring data atau analisis deret waktu. Tanggal tertentu mengambil format tanggal/bulan/tahun, di mana tanggal dan bulan dapat dipertukarkan.
Juga, bulan dapat berupa numerik serta bentuk abjad dan dalam abjad baik singkatan atau nama lengkap. Ini terutama tergantung pada berapa banyak kasus yang ada dalam data kami dan hanya dapat dicapai dengan hit and trial.
RegEx sederhana yang mencakup berbagai tanggal ditunjukkan di bawah ini:

^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$
Pola ini menangkap format tanggal dengan tanda hubung atau garis miring. Tanggal dan bulan dibatasi satu atau dua digit dan tahun hingga empat puluh digit. Entitas masing-masing ditangkap sebagai grup yang opsional dalam kasus ini.
Baca Juga: Ide dan Topik Proyek Python
Bagaimana Mengimplementasikannya dengan Python?
Ekspresi reguler yang baru saja kita buat memenuhi kriteria masing-masing yang kita asumsikan dan sekarang saatnya untuk mengimplementasikannya dalam kode Python. Python memiliki modul bawaan yang disebut modul re yang mengimplementasikan cara kerja ekspresi ini. Secara sederhana,
impor ulang
pola = '^(\d{1,2})[/-](\d{1,2})[/-](\d{2,4})$'
Modul Re menawarkan berbagai fungsi dan semuanya memiliki kasus penggunaan yang berbeda. Mari kita lihat beberapa fungsi penting:
- re.findall(): Fungsi ini mengembalikan daftar semua kecocokan dalam string uji berdasarkan pola yang diteruskan. Pertimbangkan contoh ini:
string = '25-12-1999 teks acak di sini 25/12/1999'
print(re.findall(pola, string))
Ini hanya akan mengembalikan tanggal dari string dalam daftar.
- re.sub(): Sub dalam fungsi ini adalah singkatan dari substitusi dan melakukan hal yang sama. Ini mengganti kecocokan dengan nilai pengganti yang disediakan. Fungsi mengambil pola, string, nilai pengganti, dan parameter opsional hitungan. Parameter count mengontrol berapa banyak kemunculan yang ingin Anda ganti. Secara default, ini menggantikan semuanya dan mengembalikan string baru.
- re.split(): Ini membagi string di situs yang cocok dan mengembalikan bagian sebagai string terpisah dalam daftar.
- re.search(): Fungsi ini mengembalikan objek kecocokan yang berisi kecocokan yang ditemukan dalam string bersama dengan semua grup yang ditangkapnya. Ini bisa berguna ketika Anda ingin menyimpan grup ini sebagai kolom terpisah.
Untuk melakukan ini:
cocok = re.search(pola, string)
pertandingan.group(1)
Group(0) mengembalikan seluruh kecocokan dan angka berikutnya yang sesuai menunjukkan grup lain.
Checkout: Gaji Pengembang Python di India
Kesimpulan
Ekspresi reguler adalah cara yang ampuh untuk menangkap pola dalam data tekstual. Mungkin diperlukan sedikit usaha ekstra untuk memegang perintah dari berbagai karakter tetapi menyederhanakan proses ekstraksi data dalam kasus penggunaan yang kompleks.
Berikan beberapa contoh Ekspresi Reguler dengan Python.
Contoh berikut mengilustrasikan fungsi atau ekspresi reguler di Python:
Sebuah. Penyaringan Email
Ekspresi reguler dapat digunakan secara efisien untuk memfilter email. Sintaks biasa untuk pemfilteran email adalah - ^((a-zA-Z0-9_.)+)@((a-zA-Z0-9-)+).((a-zA-Z){2,4} )$
Ekspresi ini dibagi menjadi tiga kelompok dan menangani banyak kasus termasuk - ketika nama pengguna adalah alfanumerik dan ketika memiliki titik, misalnya, "first.last@". Ekspresi ini akan digunakan untuk domain teratas yang berisi 2-4 karakter.
B. Penyaringan Tanggal
Tanggal dapat menjadi faktor penting saat menangani pemfilteran data. Data tekstual yang Anda hadapi sering kali berisi tanggal. Ekspresi reguler atau RegEx yang mengekstrak data dari teks normal adalah - ^(d{1,2})(/-)(d{1,2})(/-)(d{2,4})$
Tanggal dan bulan bisa sampai 2 digit sedangkan bulan bisa sampai 4 digit.
Apa fungsi yang terlibat dalam implementasi ekspresi reguler di Python?
Fungsi-fungsi berikut terlibat dalam implementasi ekspresi reguler di Python:
1. re.findall() - Fungsi ini menerima pola yang akan dicocokkan dengan string teks. Ini mengembalikan string yang cocok.
2. re.sub() - Sub dalam "re.sub" adalah singkatan dari "substitusi". Metode ini melakukan fungsi yang sama persis dengan fungsi "re.findall()".
3. re.split() - Ini memisahkan string di sekitar pemisah yang akan diteruskan sebagai parameternya. Pemisah bisa apa saja.
4. re.search() - Fungsi ini mengembalikan kecocokan yang ditemukan dalam string bersama dengan grup string lain yang telah ditangkapnya.
Apa sajakah urutan khusus yang digunakan dalam ekspresi reguler?
Berikut ini adalah beberapa urutan khusus yang digunakan dalam ekspresi reguler:
1. A: Periksa apakah string dimulai dengan karakter yang diberikan.
2. (Forward Slash) b: Memeriksa apakah string dimulai atau diakhiri dengan karakter yang diberikan. (string)/b memeriksa awal sementara (garis miring ke belakang) b (string) memeriksa akhir.
3. B: Tepatnya berlawanan dengan b. Memeriksa apakah string tidak dimulai dengan karakter yang diberikan.
4. d: Memeriksa nilai numerik dalam string.
5. D: Memeriksa nilai atau karakter non-numerik.
6. s: Memeriksa karakter spasi apa pun.
7. S: Memeriksa karakter non-spasi.
8. w: Memeriksa karakter alfanumerik apa pun.
9. W: Memeriksa karakter non-alfanumerik.