Ekspresi Reguler Python: Panduan Praktis
Halaman Sebelumnya Halaman Berikutnya
Sebuah ekspresi reguler adalah urutan karakter khusus yang membantu Anda mencocokkan atau menemukan string atau himpunan string lainnya, menggunakan sintaks khusus yang tersimpan dalam pola. Ekspresi reguler banyak digunakan di dunia UNIX.
Modul Python re memberikan dukungan penuh untuk ekspresi reguler seperti Perl di Python. Modul re raises exception re.error jika terjadi error saat mengkompilasi atau menggunakan ekspresi reguler.
Kita akan membahas dua fungsi penting, yang akan digunakan untuk menangani ekspresi reguler. Namun satu hal terlebih dahulu: Ada berbagai karakter yang akan memiliki arti khusus saat digunakan dalam ekspresi reguler. Untuk menghindari kebingungan saat menangani ekspresi reguler, kita akan menggunakan Raw Strings sebagai r'expression'.
Fungsi match
Fungsi ini mencoba mencocokkan pola RE pattern ke string dengan flags opsional.
Berikut adalah sintaks untuk fungsi ini −
re.match(pattern, string, flags=0)
Berikut adalah deskripsi parameter −
| Sr.No. | Parameter & Deskripsi |
| 1 | pattern Ini adalah ekspresi reguler yang akan dicocokkan. |
| 2 | string Ini adalah string yang akan dicari untuk mencocokkan pola di awal string. |
| 3 | flags Anda dapat menentukan berbagai flag menggunakan OR bitwise (|). Ini adalah modifier, yang tercantum dalam tabel di bawah. |
Fungsi re.match mengembalikan objek match pada kesuksesan, None pada kegagalan. Kita menggunakan fungsi group(num) atau groups() dari objek match untuk mendapatkan ekspresi yang dicocokkan.
| Sr.No. | Metode Objek Match & Deskripsi |
| 1 | group(num=0) Metode ini mengembalikan seluruh kecocokan (atau subgrup spesifik num) |
| 2 | groups() Metode ini mengembalikan semua subgrup yang cocok dalam tuple (kosong jika tidak ada) |
Contoh
Live Demo
#!/usr/bin/python import re line = "Cats are smarter than dogs" matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print "matchObj.group() : ", matchObj.group() print "matchObj.group(1) : ", matchObj.group(1) print "matchObj.group(2) : ", matchObj.group(2) else: print "No match!!"
Saat kode di atas dieksekusi, hasilnya adalah sebagai berikut −
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
Fungsi search
Fungsi ini mencari kemunculan pertama pola RE pattern dalam string dengan flags opsional.
Berikut adalah sintaks untuk fungsi ini −
re.search(pattern, string, flags=0)
Berikut adalah deskripsi parameter −
| Sr.No. | Parameter & Deskripsi |
| 1 | pattern Ini adalah ekspresi reguler yang akan dicocokkan. |
| 2 | string Ini adalah string yang akan dicari untuk mencocokkan pola di mana saja dalam string. |
| 3 | flags Anda dapat menentukan berbagai flag menggunakan OR bitwise (|). Ini adalah modifier, yang tercantum dalam tabel di bawah. |
Fungsi re.search mengembalikan objek match pada kesuksesan, none pada kegagalan. Kita menggunakan fungsi group(num) atau groups() dari objek match untuk mendapatkan ekspresi yang dicocokkan.
| Sr.No. | Metode Objek Match & Deskripsi |
| 1 | group(num=0) Metode ini mengembalikan seluruh kecocokan (atau subgrup spesifik num) |
| 2 | groups() Metode ini mengembalikan semua subgrup yang cocok dalam tuple (kosong jika tidak ada) |
Contoh
Live Demo
#!/usr/bin/python import re line = "Cats are smarter than dogs"; searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print "searchObj.group() : ", searchObj.group() print "searchObj.group(1) : ", searchObj.group(1) print "searchObj.group(2) : ", searchObj.group(2) else: print "Nothing found!!"
Saat kode di atas dieksekusi, hasilnya adalah sebagai berikut −
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Pencocokan versus Pencarian
Python menawarkan dua operasi primitif yang berbeda berdasarkan ekspresi reguler: match memeriksa kecocokan hanya di awal string, sementara search memeriksa kecocokan di mana saja dalam string (ini adalah apa yang dilakukan Perl secara default).
Contoh
Live Demo
#!/usr/bin/python import re line = "Cats are smarter than dogs"; matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj: print "match --> matchObj.group() : ", matchObj.group() else: print "No match!!" searchObj = re.search( r'dogs', line, re.M|re.I) if searchObj: print "search --> searchObj.group() : ", searchObj.group() else: print "Nothing found!!"
Saat kode di atas dieksekusi, hasilnya adalah sebagai berikut −
No match!! search --> searchObj.group() : dogs
Pencarian dan Penggantian
Salah satu metode re terpenting yang menggunakan ekspresi reguler adalah sub.
Sintaks
re.sub(pattern, repl, string, max=0)
Metode ini menggantikan semua kemunculan pola RE pattern dalam string dengan repl, menggantikan semua kemunculan kecuali max disediakan. Metode ini mengembalikan string yang dimodifikasi.
Contoh
Live Demo
#!/usr/bin/python import re phone = "2004-959-559 # This is Phone Number" # Delete Python-style comments num = re.sub(r'#.*$', "", phone) print "Phone Num : ", num # Remove anything other than digits num = re.sub(r'\D', "", phone) print "Phone Num : ", num
Saat kode di atas dieksekusi, hasilnya adalah sebagai berikut −
Phone Num : 2004-959-559 Phone Num : 2004959559
Modifier Ekspresi Reguler: Flag Opsional
Literal ekspresi reguler dapat menyertakan modifier opsional untuk mengontrol berbagai aspek pencocokan. Modifier ditentukan sebagai flag opsional. Anda dapat memberikan beberapa modifier menggunakan OR eksklusif (|), seperti sebelumnya dan dapat direpresentasikan oleh salah satu dari ini −
| Sr.No. | Modifier & Deskripsi |
| 1 | re.I Melakukan pencocokan tanpa memperhatikan huruf besar/kecil. |
| 2 | re.L Menginterpretasikan kata sesuai dengan lokal saat ini. Interpretasi ini mempengaruhi grup alfabetik (\w dan \W), serta perilaku batas kata (\b dan \B). |
| 3 | re.M Membuat $ cocok dengan akhir baris (bukan hanya akhir string) dan membuat ^ cocok dengan awal setiap baris (bukan hanya awal string). |
| 4 | re.S Membuat titik (dot) cocok dengan karakter apa pun, termasuk newline. |
| 5 | re.U Menginterpretasikan huruf sesuai dengan set karakter Unicode. Flag ini mempengaruhi perilaku \w, \W, \b, \B. |
| 6 | re.X Mengizinkan sintaks ekspresi reguler yang lebih "cantik". Ini mengabaikan spasi putih (kecuali di dalam set [] atau saat diescape oleh backslash) dan memperlakukan # yang tidak diescape sebagai penanda komentar. |
Pola Ekspresi Reguler
Keadaan karakter kontrol, (+ ? . * ^ $ ( ) [ ] { } | \), semua karakter cocok dengan dirinya sendiri. Anda dapat escape karakter kontrol dengan mendahalikannya dengan backslash.
Tabel berikut mencantumkan sintaks ekspresi reguler yang tersedia di Python −
| Sr.No. | Pola & Deskripsi |
| 1 | ^ Cocok dengan awal baris. |
| 2 | $ Cocok dengan akhir baris. |
| 3 | . Cocok dengan karakter tunggal apa pun kecuali newline. Penggunaan opsi m memungkinkan untuk mencocokkan newline juga. |
| 4 | [...] Cocok dengan karakter tunggal apa pun dalam kurung siku. |
| 5 | [^...] Cocok dengan karakter tunggal apa pun yang tidak dalam kurung siku |
| 6 | re* Cocok dengan 0 atau lebih kemunculan ekspresi sebelumnya. |
| 7 | re+ Cocok dengan 1 atau lebih kemunculan ekspresi sebelumnya. |
| 8 | re? Cocok dengan 0 atau 1 kemunculan ekspresi sebelumnya. |
| 9 | re{ n} Cocok dengan tepat n kemunculan ekspresi sebelumnya. |
| 10 | re{ n,} Cocok dengan n atau lebih kemunculan ekspresi sebelumnya. |
| 11 | re{ n, m} Cocok dengan paling sedikit n dan paling banyak m kemunculan ekspresi sebelumnya. |
| 12 | a| b Cocok dengan a atau b. |
| 13 | (re) Mengelompokkan ekspresi reguler dan mengingat teks yang cocok. |
| 14 | (?imx) Mengaktifkan atau menonaktifkan sementara opsi i, m, atau x dalam ekspresi reguler. Jika dalam kurung, hanya area tersebut yang terpengaruh. |
| 15 | (?-imx) Menonaktifkan sementara opsi i, m, atau x dalam ekspresi reguler. Jika dalam kurung, hanya area tersebut yang terpengaruh. |
| 16 | (?: re) Mengelompokkan ekspresi reguler tanpa mengingat teks yang cocok. |
| 17 | (?imx: re) Mengaktifkan sementara opsi i, m, atau x dalam kurung. |
| 18 | (?-imx: re) Menonaktifkan sementara opsi i, m, atau x dalam kurung. |
| 19 | (?#...) Komentar. |
| 20 | (?= re) Menentukan posisi menggunakan pola. Tidak memiliki rentang. |
| 21 | (?! re) Menentukan posisi menggunakan negasi pola. Tidak memiliki rentang. |
| 22 | (?> re) Cocok dengan pola independen tanpa backtracking. |
| 23 | \w Cocok dengan karakter kata. |
| 24 | \W Cocok dengan karakter non-kata. |
| 25 | \s Cocok dengan spasi putih. Setara dengan [\t\n\r\f]. |
| 26 | \S Cocok dengan non-spasi putih. |
| 27 | \d Cocok dengan digit. Setara dengan [0-9]. |
| 28 | \D Cocok dengan non-digit. |
| 29 | \A Cocok dengan awal string. |
| 30 | \Z Cocok dengan akhir string. Jika newline ada, cocok tepat sebelum newline. |
| 31 | \z Cocok dengan akhir string. |
| 32 | \G Cocok dengan titik di mana kecocokan terakhir selesai. |
| 33 | \b Cocok dengan batas kata ketika di luar kurung siku. Cocok dengan backspace (0x08) ketika di dalam kurung siku. |
| 34 | \B Cocok dengan batas non-kata. |
| 35 | \n, \t, etc. Cocok dengan newline, carriage return, tab, dll. |
| 36 | \1...\9 Cocok dengan subekspresi terkelompok ke-n. |
| 37 | \10 Cocok dengan subekspresi terkelompok ke-n jika sudah cocok. Jika tidak, merujuk ke representasi oktal dari kode karakter. |
Contoh Ekspresi Reguler
Karakter Literal
| Sr.No. | Contoh & Deskripsi |
| 1 | python Cocok dengan "python". |
Kelas Karakter
| Sr.No. | Contoh & Deskripsi |
| 1 | [Pp]ython Cocok dengan "Python" atau "python" |
| 2 | rub[ye] Cocok dengan "ruby" atau "rube" |
| 3 | [aeiou] Cocok dengan salah satu huruf vokal kecil |
| 4 | [0-9] Cocok dengan digit apa pun; sama dengan [0123456789] |
| 5 | [a-z] Cocok dengan huruf ASCII kecil apa pun |
| 6 | [A-Z] Cocok dengan huruf ASCII besar apa pun |
| 7 | [a-zA-Z0-9] Cocok dengan salah satu dari yang di atas |
| 8 | [^aeiou] Cocok dengan apa pun selain huruf vokal kecil |
| 9 | [^0-9] Cocok dengan apa pun selain digit |
Kelas Karakter Khusus
| Sr.No. | Contoh & Deskripsi |
| 1 | . Cocok dengan karakter apa pun kecuali newline |
| 2 | \d Cocok dengan digit: [0-9] |
| 3 | \D Cocok dengan non-digit: [^0-9] |
| 4 | \s Cocok dengan karakter spasi putih: [ \t\r\n\f] |
| 5 | \S Cocok dengan non-spasi putih: [^ \t\r\n\f] |
| 6 | \w Cocok dengan karakter kata tunggal: [A-Za-z0-9_] |
| 7 | \W Cocok dengan karakter non-kata: [^A-Za-z0-9_] |
Kasus Pengulangan
| Sr.No. | Contoh & Deskripsi |
| 1 | ruby? Cocok dengan "rub" atau "ruby": y adalah opsional |
| 2 | ruby* Cocok dengan "rub" ditambah 0 atau lebih y |
| 3 | ruby+ Cocok dengan "rub" ditambah 1 atau lebih y |
| 4 | \d{3} Cocok dengan tepat 3 digit |
| 5 | \d{3,} Cocok dengan 3 atau lebih digit |
| 6 | \d{3,5} Cocok dengan 3, 4, atau 5 digit |
Pengulangan Non-lobat
Ini mencocokkan jumlah pengulangan terkecil −
| Sr.No. | Contoh & Deskripsi |
| 1 | <.*> Pengulangan lobat: cocok dengan "<python>perl>" |
| 2 | <.*?> Non-lobat: cocok dengan "<python>" dalam "<python>perl>" |
Pengelompokan dengan Kurung
| Sr.No. | Contoh & Deskripsi |
| 1 | \D\d+ Tidak ada grup: + mengulang \d |
| 2 | (\D\d)+ Terkelompok: + mengulang pasangan \D\d |
| 3 | ([Pp]ython(, )?)+ Cocok dengan "Python", "Python, python, python", dll. |
Referensi Balik
Ini mencocokkan grup yang sebelumnya dicocokkan lagi −
| Sr.No. | Contoh & Deskripsi |
| 1 | ([Pp])ython&\1ails Cocok dengan python&pails atau Python&Pails |
| 2 | (['"])[^\1]*\1 String dengan kutip tunggal atau ganda. \1 cocok dengan apa pun yang dicocokkan oleh grup pertama. \2 cocok dengan apa pun yang dicocokkan oleh grup kedua, dll. |
Alternatif
| Sr.No. | Contoh & Deskripsi |
| 1 | python|perl Cocok dengan "python" atau "perl" |
| 2 | rub(y|le)) Cocok dengan "ruby" atau "ruble" |
| 3 | Python(!+|\?) "Python" diikuti oleh satu atau lebih ! atau satu ? |
Anchor
Ini perlu menentukan posisi kecocokan.
| Sr.No. | Contoh & Deskripsi |
| 1 | ^Python Cocok dengan "Python" di awal string atau baris internal |
| 2 | Python$ Cocok dengan "Python" di akhir string atau baris |
| 3 | \APython Cocok dengan "Python" di awal string |
| 4 | Python\Z Cocok dengan "Python" di akhir string |
| 5 | \bPython\b Cocok dengan "Python" di batas kata |
| 6 | \brub\B \B adalah batas non-kata: cocok dengan "rub" dalam "rube" dan "ruby" tetapi tidak sendiri |
| 7 | Python(?=!) Cocok dengan "Python", jika diikuti oleh tanda seru. |
| 8 | Python(?!!) Cocok dengan "Python", jika tidak diikuti oleh tanda seru. |
Sintaks Khusus dengan Kurung
| Sr.No. | Contoh & Deskripsi |
| 1 | R(?#comment) Cocok dengan "R". Sisa adalah komentar |
| 2 | R(?i)uby Tanpa memperhatikan huruf besar/kecil saat mencocokkan "uby" |
| 3 | R(?i:uby) Sama dengan di atas |
| 4 | rub(?:y|le)) Kelompok hanya tanpa menciptakan referensi balik \1 |