Ekspresi Reguler di Python
Artikel ini menjelaskan ekspresi reguler di Python.
Kami akan mencakup berbagai topik, mulai dari penggunaan dasar modul re hingga pencocokan pola ekspresi reguler yang kompleks.
YouTube Video
Ekspresi Reguler di Python
Modul re digunakan untuk mencari dan memanipulasi string menggunakan ekspresi reguler.
Apa itu modul re?
Modul re termasuk dalam pustaka standar Python dan menyediakan fungsi untuk manipulasi string menggunakan ekspresi reguler. Ekspresi reguler digunakan untuk secara efisien menemukan, mengekstrak, atau mengganti pola string tertentu.
Pola Dasar Ekspresi Reguler
Ekspresi reguler mendefinisikan pola dengan menggunakan simbol khusus. Berikut adalah beberapa pola dasar.
.: Karakter tunggal apa saja^: Awal sebuah string$: Akhir sebuah string\d: Angka apa saja (0-9)\w: Karakter kata apa saja (a-z, A-Z, 0-9, _)\s: Karakter spasi apa saja*: Nol atau lebih pengulangan+: Satu atau lebih pengulangan[]: Kelas karakter (misalnya,[a-z]mencocokkan huruf kecil alfabet)
1import re
2
3pattern = r"\d{3}-\d{4}"
4text = "My postal code is 123-4567."
5result = re.search(pattern, text)
6if result:
7 print(result.group()) # Output: 123-4567
8
9# Define a pattern using basic regular expression symbols
10pattern = r"^\w+\s\d+\s[a-zA-Z]+$"
11
12# Example text to test the pattern
13text = "Room 23 Tokyo"
14
15# Check if the pattern matches the text
16result = re.match(pattern, text)
17if result:
18 print("Matched:", result.group())
19else:
20 print("No match")- Kode ini terlebih dahulu memeriksa apakah string cocok dengan pola kode pos. Selanjutnya, ini memeriksa apakah seluruh string (dari awal hingga akhir) cocok dengan pola yang tersusun dari sebuah kata, karakter spasi, digit, karakter spasi, dan sebuah kata bahasa Inggris. Ini membantu Anda memahami bagaimana elemen-elemen dasar ekspresi reguler dapat dikombinasikan.
Cara Menggunakan Fungsi Pencocokan
re.match()
re.match() memeriksa apakah awal string cocok dengan pola yang ditentukan.
1import re
2
3pattern = r"\w+"
4text = "Python is powerful"
5match = re.match(pattern, text)
6if match:
7 print(match.group()) # Output: Python- Kode ini memeriksa apakah string dimulai dengan karakter kata (alfanumerik atau garis bawah). Kata pertama 'Python' sesuai dengan pola dan ditampilkan.
re.search()
re.search() memindai seluruh string dan mengembalikan kecocokan pertama.
1import re
2
3pattern = r"powerful"
4text = "Python is powerful and versatile"
5search = re.search(pattern, text)
6if search:
7 print(search.group()) # Output: powerful- Kode ini menelusuri seluruh string untuk kata 'powerful' dan mengembalikan kecocokan pertama. Akibatnya,
re.search()menghasilkan string yang cocok 'powerful'.
re.findall()
re.findall() mengembalikan semua kecocokan pola sebagai daftar.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.findall(pattern, text)
6print(matches) # Output: ['Python', 'strong']- Kode ini menemukan semua kata yang panjangnya tepat enam karakter dan mengembalikannya sebagai daftar. 'Python' dalam string memenuhi kondisi, dan daftar
['Python']ditampilkan.
re.finditer()
re.finditer() mengembalikan semua kecocokan sebagai iterator, memungkinkan Anda mendapatkan informasi detail untuk setiap kecocokan.
1import re
2
3pattern = r"\b\w{6}\b"
4text = "Python is powerful and versatile"
5matches = re.finditer(pattern, text)
6for match in matches:
7 print(match.group()) # Output: Python- Kode ini mencari semua kata yang terdiri dari enam huruf secara berurutan dan memproses setiap kecocokan melalui sebuah iterator. 'Python' sesuai dengan polanya di sini dan ditampilkan.
Penggantian dan Pemisahan
re.sub()
re.sub() menggantikan bagian dari string yang cocok dengan ekspresi reguler dengan string lainnya.
1import re
2
3pattern = r"\d+"
4text = "There are 100 apples"
5new_text = re.sub(pattern, "many", text)
6print(new_text) # Output: There are many apples- Kode ini mengganti semua digit dalam string dengan 'many'.
re.split()
re.split() membagi string pada bagian yang cocok dengan ekspresi reguler.
1import re
2
3pattern = r"\s+"
4text = "Python is powerful"
5parts = re.split(pattern, text)
6print(parts) # Output: ['Python', 'is', 'powerful']- Kode ini memisahkan string berdasarkan satu atau lebih karakter spasi. Hasilnya, string dipisahkan menjadi kata-kata, menghasilkan
['Python', 'is', 'powerful'].
Grup dan Penangkapan
Menggunakan pengelompokan ekspresi reguler memudahkan untuk mengekstrak substring yang cocok. Menyertakan dalam tanda kurung () menangkapnya sebagai sebuah grup.
1import re
2
3pattern = r"(\d{3})-(\d{4})"
4text = "My postal code is 123-4567."
5match = re.search(pattern, text)
6if match:
7 print(match.group(1)) # Output: 123
8 print(match.group(2)) # Output: 4567- Kode ini mengekstrak angka 3 digit dan 4 digit sebagai grup terpisah dari kode pos dengan format '123-4567'.
group(1)mengembalikan tiga digit pertama '123', dangroup(2)mengembalikan empat digit terakhir '4567'.
Grup bernama
Dengan menggunakan grup bernama, Anda dapat mengambil nilai berdasarkan nama yang bermakna alih-alih bergantung pada indeks. Di bawah ini adalah contoh konkret yang mengekstrak tanggal dan level dari sebuah log.
1import re
2
3log = "2025-10-25 14:00:01 [ERROR] Something failed"
4
5pattern = r"(?P<date>\d{4}-\d{2}-\d{2}) (?P<time>\d{2}:\d{2}:\d{2}) \[(?P<level>[A-Z]+)\] (?P<msg>.*)"
6m = re.search(pattern, log)
7if m:
8 print(m.group("date"), m.group("time"), m.group("level"))
9 print("message:", m.group("msg"))- Kode ini menggunakan grup bernama untuk mengekstrak tanggal, waktu, level, dan pesan dari sebuah string log. Nilai-nilainya diambil menggunakan nama yang bermakna, bukan indeks.
Menggunakan Opsi Bendera
Modul re memiliki beberapa opsi bendera untuk mengontrol perilaku pencarian.
re.IGNORECASE(re.I): Opsi bendera yang membuat pencocokan tidak peka huruf besar kecil.re.MULTILINE(re.M): Opsi bendera yang memungkinkan pencocokan melintasi beberapa baris.re.DOTALL(re.S): Opsi bendera di mana titik.juga mencocokkan karakter baris baru.
1import re
2
3pattern = r"python"
4text = "Python is powerful"
5match = re.search(pattern, text, re.IGNORECASE)
6if match:
7 print(match.group()) # Output: Python- Kode ini mencari kata 'python' tanpa membedakan huruf besar-kecil. Dengan menggunakan flag
re.IGNORECASE, ini juga akan mencocokkan 'Python'.
Kelebihan objek ekspresi reguler (re.compile)
Mengompilasi pola dengan re.compile membuatnya lebih efisien untuk digunakan kembali dan meningkatkan keterbacaan. Anda juga dapat menetapkan flag di sini.
Contoh berikut berulang kali mencari kecocokan di banyak baris menggunakan pola yang dikompilasi. Jika Anda sering menggunakan pola yang sama, mengompilasinya dengan re.compile meningkatkan kinerja.
1import re
2
3pattern = re.compile(r"User: (\w+), ID: (\d+)")
4text = "User: alice, ID: 1\nUser: bob, ID: 2"
5
6for m in pattern.finditer(text):
7 print(m.groups())- Kode ini menggunakan ekspresi reguler yang dikompilasi untuk mengekstrak nama pengguna dan ID dari banyak baris.
re.compilemeningkatkan efisiensi saat menggunakan kembali pola yang sama dan juga membuat kode lebih mudah dibaca.
Aplikasi
Sebagai contoh, pertimbangkan sebuah skrip yang mengekstrak semua alamat email dari file teks.
1import re
2
3pattern = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"
4text = "Contact us at info@example.com or support@service.com."
5emails = re.findall(pattern, text)
6print(emails) # Output: ['info@example.com', 'support@service.com']- Kode ini menemukan semua alamat email dalam string dan mengekstraknya sebagai daftar.
Kesimpulan
Modul re adalah alat yang kuat untuk manipulasi string di Python. Di sini, kami telah membahas berbagai hal, dari penggunaan dasar hingga ekspresi reguler lanjutan menggunakan pengelompokan dan opsi bendera. Ekspresi reguler di Python sangat kuat dan merupakan alat yang tak tergantikan untuk pemrosesan teks.
Anda dapat mengikuti artikel di atas menggunakan Visual Studio Code di saluran YouTube kami. Silakan periksa juga saluran YouTube kami.