Python - Regular Expressions (Indonesia)
Halo there, masa depan jinaks Python! Hari ini, kita akan memulai perjalanan yang menarik ke dunia Regular Expressions (regex) di Python. Jangan khawatir jika Anda belum pernah mendengar tentang regex sebelumnya - pada akhir tutorial ini, Anda akan menguasai alat yang kuat ini seperti seorang pro!
Apa itu Regular Expressions?
Sebelum kita melompat masuk, mari kita mengerti apa itu regular expressions. Bayangkan Anda adalah detektif yang mencari pola spesifik di atas lautan teks. Regular expressions adalah seperti kaca pembesar Anda, membantu Anda mencari dan mengolah string berdasarkan pola. Keren, kan?
Raw Strings
Di Python, ketika bekerja dengan regex, kita sering menggunakan raw strings. Ini adalah string yang diawali dengan 'r' dan memperlakukan backslashes sebagai karakter literal. Ini sangat berguna dalam regex karena backslashes adalah umum.
# String normal
print("Halo\nDunia")
# Raw string
print(r"Halo\nDunia")
Pada kasus pertama, Anda akan melihat "Halo" dan "Dunia" pada baris terpisah. Pada kasus kedua, Anda akan melihat "Halo\nDunia" seperti biasa. Ini menjadi krusial ketika bekerja dengan pola regex.
Metacharacters
Metacharacters adalah blok penyusun dari regex. Mereka memiliki arti khusus dan membantu kita mendefinisikan pola. Mari kita lihat beberapa yang umum:
Metacharacter | Arti |
---|---|
. | Cocokkan setiap karakter kecuali newline |
^ | Cocokkan awal string |
$ | Cocokkan akhir string |
* | Cocokkan 0 atau lebih pengulangan |
+ | Cocokkan 1 atau lebih pengulangan |
? | Cocokkan 0 atau 1 pengulangan |
{} | Cocokkan jumlah pengulangan yang ditentukan secara eksplisit |
[] | Menentukan sekumpulan karakter untuk dicocokkan |
\ | Menghindari karakter khusus |
Fungsi re.match()
Fungsi re.match()
berusaha untuk mencocokkan pola di awal string. Jika menemukan kecocokan, itu mengembalikan objek kecocokan; jika tidak, itu mengembalikan None.
import re
hasil = re.match(r"Halo", "Halo, Dunia!")
if hasil:
print("Kecocokan ditemukan:", hasil.group())
else:
print("Tidak ada kecocokan")
Ini akan mencetak "Kecocokan ditemukan: Halo". Metode group()
mengembalikan substring yang cocok.
Fungsi re.search()
Sementara re.match()
mencari kecocokan di awal string, re.search()
menggeser keseluruhan string untuk mencari kecocokan.
import re
hasil = re.search(r"Dunia", "Halo, Dunia!")
if hasil:
print("Kecocokan ditemukan:", hasil.group())
else:
print("Tidak ada kecocokan")
Ini akan mencetak "Kecocokan ditemukan: Dunia".
Pencocokan Vs Pencarian
Perbedaan utama antara match()
dan search()
adalah bahwa match()
hanya memeriksa kecocokan di awal string, sedangkan search()
memeriksa kecocokan di mana saja di string.
Fungsi re.findall()
Fungsi re.findall()
mengembalikan semua kecocokan non-overlapping dari pola di string sebagai daftar.
import re
teks = "The rain in Spain falls mainly in the plain"
hasil = re.findall(r"ain", teks)
print(hasil)
Ini akan mencetak ['ain', 'ain', 'ain']
.
Fungsi re.sub()
Fungsi re.sub()
mengganti semua kemunculan pola di string dengan string pengganti.
import re
teks = "The rain in Spain"
hasil = re.sub(r"a", "o", teks)
print(hasil)
Ini akan mencetak "The roin in Spoin".
Fungsi re.compile()
Fungsi re.compile()
menciptakan objek regex untuk penggunaan ulang, yang dapat lebih efisien jika Anda menggunakan pola yang sama beberapa kali.
import re
pola = re.compile(r"\d+")
hasil1 = pola.findall("There are 123 apples and 456 oranges")
hasil2 = pola.findall("I have 789 bananas")
print(hasil1)
print(hasil2)
Ini akan mencetak ['123', '456']
dan ['789']
.
Fungsi re.finditer()
Fungsi re.finditer()
mengembalikan wadah yang menghasilkan objek kecocokan untuk semua kecocokan non-overlapping pola di string.
import re
teks = "The rain in Spain"
for kecocokan in re.finditer(r"ain", teks):
print(f"Ditemukan '{kecocokan.group()}' di posisi {kecocokan.start()}-{kecocokan.end()}")
Ini akan mencetak:
Ditemukan 'ain' di posisi 5-8
Ditemukan 'ain' di posisi 17-20
Penggunaan Kasus Python Regex
Regular expressions memiliki banyak aplikasi praktis. Mari kita lihat kasus penggunaan umum:
Mencari kata yang dimulai dengan huruf vocal
import re
teks = "An apple a day keeps the doctor away"
huruf_vokal = re.findall(r'\b[aeiouAEIOU]\w+', teks)
print(huruf_vokal)
Ini akan mencetak ['An', 'apple', 'a', 'away']
.
Regular Expression Modifiers: Option Flags
Modul re Python menyediakan beberapa flag opsi yang mengubah bagaimana pola diinterpretasikan:
Flag | Deskripsi |
---|---|
re.IGNORECASE (re.I) | Melakukan pencocokan tak sensitif huruf besar/kecil |
re.MULTILINE (re.M) | Membuat ^ mencocokkan awal setiap baris dan $ akhir setiap baris |
re.DOTALL (re.S) | Membuat . mencocokkan setiap karakter, termasuk newline |
re.VERBOSE (re.X) | Memungkinkan Anda menulis pola regex yang lebih dapat dibaca |
Regular Expression Patterns
Mari kita jelajahi beberapa pola yang lebih tingkat lanjut:
Kelas Karakter
Kelas karakter memungkinkan Anda menentukan sekumpulan karakter untuk dicocokkan:
import re
teks = "The quick brown fox jumps over the lazy dog"
hasil = re.findall(r"[aeiou]", teks)
print(hasil)
Ini akan mencetak semua huruf vokal yang ditemukan di teks.
Kelas Karakter Khusus
Python regex mendukung kelas karakter khusus:
Class | Deskripsi |
---|---|
\d | Mencocokkan setiap digit desimal |
\D | Mencocokkan setiap karakter non-digit |
\s | Mencocokkan setiap karakter whitespace |
\S | Mencocokkan setiap karakter non-whitespace |
\w | Mencocokkan setiap karakter alfanumerik |
\W | Mencocokkan setiap karakter non-alfanumerik |
Kasus Pengulangan
Kita dapat menentukan berapa kali pola harus muncul:
import re
teks = "I have 111 apples and 22 oranges"
hasil = re.findall(r"\d{2,3}", teks)
print(hasil)
Ini akan mencetak ['111', '22']
, mencocokkan nomor dengan 2 atau 3 digit.
Pengulangan Tak Ganas
Dengan default, pengulangan adalah ganas, yang berarti itu mencocokkan sebanyak mungkin. Menambahkan ? setelah pengulangan membuatnya tak ganas:
import re
teks = "<h1>Title</h1><p>Paragraph</p>"
ganas = re.findall(r"<.*>", teks)
tak_ganas = re.findall(r"<.*?>", teks)
print("Ganas:", ganas)
print("Tak ganas:", tak_ganas)
Ini akan menunjukkan perbedaan antara pengulangan ganas dan tak ganas.
Penggunaan Kurung untuk Gruping
Kurung memungkinkan Anda untuk mengelompokkan bagian dari regex:
import re
teks = "John Smith ([email protected])"
hasil = re.search(r"(\w+) (\w+) \((\w+@\w+\.\w+)\)", teks)
if hasil:
print(f"Full Name: {hasil.group(1)} {hasil.group(2)}")
print(f"Email: {hasil.group(3)}")
Ini meng ekstrak nama dan email dari teks.
Backreferences
Backreferences memungkinkan Anda mengacu ke grup yang sudah dicocokkan sebelumnya:
import re
teks = "<h1>Title</h1><p>Paragraph</p>"
hasil = re.findall(r"<(\w+)>.*?</\1>", teks)
print(hasil)
Ini mencocokkan tag HTML yang membuka dan menutup.
Alternatif
Karakter | memungkinkan Anda menentukan alternatif:
import re
teks = "The color of the sky is blue or gray"
hasil = re.search(r"blue|gray", teks)
if hasil:
print(f"Found color: {hasil.group()}")
Ini mencocokkan "blue" atau "gray".
Penyangga
Penyangga menentukan posisi di teks:
import re
teks = "Python is awesome"
awal = re.match(r"^Python", teks)
akhir = re.search(r"awesome$", teks)
print(f"Starts with Python: {bool(awal)}")
print(f"Ends with awesome: {bool(akhir)}")
Ini memeriksa jika teks dimulai dengan "Python" dan diakhiri dengan "awesome".
Sintaks Khusus dengan Kurung
Kurung dapat digunakan untuk lebih dari sekedar pengelompokkan:
- (?:...) membuat grup non-capturing
- (?P
...) membuat grup dengan nama - (?=...) membuat positive lookahead
- (?!...) membuat negative lookahead
import re
teks = "Python version 3.9.5"
hasil = re.search(r"Python (?:version )?(?P<version>\d+\.\d+\.\d+)", teks)
if hasil:
print(f"Version: {hasil.group('version')}")
Ini meng ekstrak nomor versi, apakah "version" ada di teks atau tidak.
Dan itu sudah semua, folks! Kita telah melakukan perjalanan melalui negeri Python regex, dari dasar-dasar ke konsep yang quiet advance. Ingat, seperti setiap alat yang kuat, regex memerlukan praktek untuk menguasainya. Jadi jangan kesusahan jika itu terasa menantang di awal. Tetap eksperimen, dan segera Anda akan mencari pola seperti detektif pro! Happy coding!
Credits: Image by storyset