Python

Ekspresi Reguler menggunakan Python 3

Ekspresi Reguler menggunakan Python 3
Ekspresi Reguler sering dilihat sebagai rangkaian hieroglif yang sangat tidak jelas yang biasanya disalin dari Internet dan ditempelkan ke kodenya. Mantra misterius ini kemudian menunjukkan kemampuan magis untuk menemukan pola di dalam string teks dan jika kita menanyakannya dengan baik, itu bahkan akan membantu kita mengganti pola yang diberikan dalam string dengan sesuatu yang lebih baik.

Misalnya, ketika Anda menulis penangan untuk URL (dan Tuhan membantu Anda jika Anda menulisnya dari awal) maka Anda sering ingin menampilkan hasil yang sama terlepas dari tanda '/' di URL. E.g https://contoh.com/user/settings/ dan https://example.com/user/settings keduanya harus mengarah ke halaman yang sama meskipun ada tanda '/'. 

Namun, Anda tidak dapat mengabaikan semua garis miring, seperti:

  1. Garis miring antara 'pengguna' dan 'pengaturan', e, 'pengguna/pengaturan'.
  2. Anda juga harus memperhitungkan '//' di awal FQDN Anda diikuti dengan 'https'.

Jadi, Anda membuat aturan seperti, “Abaikan saja garis miring ke depan diikuti dengan ruang kosong.” dan jika mau, Anda dapat menyandikan aturan itu dengan serangkaian pernyataan if-else. Tapi itu akan menjadi rumit dengan cepat. Anda dapat menulis fungsi yang mengatakan cleanUrl() yang dapat merangkum ini untuk Anda. Tapi alam semesta akan segera mulai melemparkan lebih banyak bola melengkung padamu. Anda akan segera menemukan diri Anda menulis fungsi untuk cleanHeaders(), processLog(), dll. Atau Anda dapat menggunakan ekspresi reguler kapan pun jenis pencocokan pola diperlukan.

IO dan File Standar

Sebelum kita masuk ke detail ekspresi reguler, ada baiknya menyebutkan model yang dimiliki sebagian besar sistem untuk aliran teks. Berikut ini ringkasan singkatnya (tidak lengkap):

  1. Teks diproses sebagai aliran karakter (tunggal).
  2. Aliran ini dapat berasal dari file teks Unicode atau ASCII atau dari input standar (keyboard) atau dari koneksi jaringan jarak jauh. Setelah diproses, katakanlah dengan skrip regex, output masuk ke file atau aliran jaringan atau output standar (mis.g, konsol)
  3. Aliran terdiri dari satu atau lebih baris. Setiap baris memiliki nol atau lebih karakter diikuti oleh baris baru.

Demi kesederhanaan, saya ingin Anda membayangkan bahwa file terdiri dari baris yang diakhiri dengan karakter baris baru new. Kami memecah file ini menjadi baris (atau string) individual yang masing-masing diakhiri dengan baris baru atau karakter normal (untuk baris terakhir).

Regex dan String

Regex tidak ada hubungannya, khususnya, dengan file. Bayangkan itu sebagai kotak hitam yang dapat mengambil string arbitrer apa pun dengan panjang (terbatas) sebagai input dan setelah mencapai akhir string ini, ia dapat:

  1. Terima talinya. Dengan kata lain, string pertandingan ekspresi reguler (regex).
  2. Tolak string, i.e, string tidak pertandingan ekspresi reguler (regex).

Terlepas dari sifatnya yang kotak hitam, saya akan menambahkan beberapa batasan lagi pada mesin ini. Sebuah regex membaca sebuah string berurutan, dari kiri ke kanan, dan hanya membaca satu karakter pada satu waktu. Jadi string "LinuxPetunjuk" dengan dibaca sebagai:

'L"i"n"u"x"H"i"n"t' [Kiri ke kanan]

Mari kita mulai dengan sederhana

Jenis regex yang paling sederhana adalah mencari dan mencocokkan string 'C'. Ekspresi reguler untuk itu hanya 'C'. Cukup sepele. Cara melakukannya dengan Python mengharuskan Anda mengimpor terlebih dahulu kembali modul untuk ekspresi reguler.

>>> impor ulang

Kami kemudian menggunakan fungsi re.Cari(pola, tali) dimana pola adalah ekspresi reguler kami dan tali dalam string input tempat kami mencari pola.

>>> ulang.search('C', 'Kalimat ini mengandung C yang disengaja')

Fungsi mengambil pola 'C', mencarinya di string input dan mencetak lokasi (span) dimana pola tersebut ditemukan. Bagian dari string ini, substring ini yang cocok dengan ekspresi reguler kami. Jika tidak ada kecocokan yang ditemukan, output akan menjadi Tidak ada obyek.

Demikian pula, Anda dapat mencari pola 'regular expression' sebagai berikut:

>>> ulang.search(“regular expression”,“Kita dapat menggunakan ekspresi reguler untuk mencari pola.”)

kembali.cari() , ulang.pertandingan() dan ulangi.pertandingan penuh()

Tiga fungsi yang berguna dari modul re meliputi:

1.  kembali.Cari(pola, tali)

Ini mengembalikan substring yang cocok dengan polanya, seperti yang telah kita lihat di atas. Jika tidak ada kecocokan yang ditemukan maka Tidak ada dikembalikan. Jika beberapa substring sesuai dengan pola yang diberikan, hanya kemunculan pertama yang dilaporkan.

2.  kembali.pertandingan(pola, tali)

Fungsi ini mencoba mencocokkan pola yang disediakan dari awal string. Jika menemukan jeda di suatu tempat di tengah jalan, ia kembali Tidak ada.

Sebagai contoh,

>>> ulang.pertandingan("Joh", "John Doe")

Dimana string "Nama saya John Doe" tidak cocok, dan karenanya Tidak ada dikembalikan.

>>> cetak(re.match(“Joh”, “Nama saya John Doe”))
Tidak ada

3.  kembali.pertandingan penuh(pola, tali)

Ini lebih ketat daripada kedua hal di atas, dan mencoba menemukan kecocokan persis dari pola dalam string, jika tidak, defaultnya adalah Tidak ada.

>>> cetak(re.fullmatch("Joh", "Joh"))

# Hal lain tidak akan cocok

Saya akan menggunakan hanya kembali.Cari() fungsi di sisa artikel ini. Setiap kali, saya mengatakan regex menerima string ini, itu berarti athe kembali.Cari() function telah menemukan substring yang cocok dalam string input dan mengembalikannya, alih-alih Tidak adaobyek.

Karakter spesial

Ekspresi reguler seperti 'John' dan 'C' tidak banyak berguna. Kami membutuhkan karakter khusus yang memiliki arti khusus dalam konteks ekspresi reguler. Berikut adalah beberapa contoh:

    1. ^ - Ini cocok dengan awal string. Misalnya, '^C' akan cocok dengan semua string yang dimulai dengan huruf C.
    2. $ - Ini cocok dengan akhir baris.
    3. . - Titik adalah untuk menunjukkan satu atau lebih karakter, kecuali baris baru.
    4. * - Ini adalah nol atau lebih karakter dari apa yang mendahuluinya. Jadi b* cocok dengan 0 atau lebih kemunculan b. ab* hanya cocok dengan a, ab, dan a
    5. + - Ini untuk satu atau lebih karakter dari apa yang mendahuluinya. Jadi b+ cocok dengan 1 atau lebih kemunculan b. ab* hanya cocok dengan a, ab, dan a
    6. \ - Garis miring terbalik digunakan sebagai urutan pelarian di regex. Jadi jika Anda ingin ekspresi reguler untuk mencari keberadaan literal simbol dolar '$' alih-alih akhir baris. Anda dapat menulis \$ dalam ekspresi reguler.
    7. Tanda kurung kurawal dapat digunakan untuk menentukan jumlah pengulangan yang ingin Anda lihat. Misalnya, pola seperti ab10 menandakan string a diikuti oleh 10 b akan cocok dengan pola ini. Anda juga dapat menentukan rentang angka, seperti b4,6 mencocokkan string yang berisi b yang diulang 4 hingga 6 kali berturut-turut. Pola untuk 4 pengulangan atau lebih hanya memerlukan tanda koma, seperti b4,
    8. Kurung persegi dan rentang karakter. RE seperti [0-9] dapat bertindak seperti pengganti untuk setiap digit antara 0 dan 9. Demikian pula, Anda dapat memiliki angka antara satu dan lima [1-5] atau untuk mencocokkan huruf besar apa pun, gunakan [A-Z] atau untuk huruf apa pun dari Alfabet terlepas dari itu penggunaan huruf besar atau kecil [A-z].
      Misalnya string apa pun yang dibuat dengan tepat sepuluh digit cocok dengan ekspresi reguler [0-9]10, cukup berguna saat Anda mencari nomor telepon dalam string tertentu.
    9. Anda dapat membuat pernyataan suka ATAU, menggunakan | karakter di mana ekspresi reguler terdiri dari dua atau lebih ekspresi reguler, katakanlah, A dan B. Regex A|B cocok jika string input cocok untuk ekspresi reguler A atau untuk B.
    10. Anda dapat mengelompokkan regex yang berbeda bersama-sama. Misalnya, regex (A|B)C akan cocok dengan regex untuk AC dan

Ada banyak lagi yang harus dibahas, tetapi saya akan merekomendasikan belajar sambil jalan daripada membebani otak Anda dengan banyak simbol dan kasus tepi yang tidak jelas. Jika ragu, Dokumen Python sangat membantu dan sekarang Anda cukup tahu untuk mengikuti dokumen dengan mudah.

Pengalaman dan Referensi Langsung

Jika Anda ingin melihat interpretasi visual dari regex Anda, Anda dapat mengunjungi Debuggex. Situs ini menghasilkan tampilan regex Anda secara real-time dan memungkinkan Anda mengujinya terhadap berbagai string input.

Untuk mengetahui lebih banyak tentang aspek teoretis Ekspresi Reguler, Anda mungkin ingin melihat beberapa bab pertama Pengantar Teori Komputasi oleh Michael Sipser. Sangat mudah untuk diikuti dan menunjukkan pentingnya ekspresi reguler sebagai konsep inti dari komputasi itu sendiri!

5 Kartu Tangkap Game Teratas
Kita semua telah melihat dan menyukai gameplay streaming di YouTube. PewDiePie, Jakesepticye, dan Markiplier hanyalah beberapa pemain top yang telah m...
Cara Mengembangkan Game di Linux
Satu dekade yang lalu, tidak banyak pengguna Linux yang memprediksi bahwa sistem operasi favorit mereka suatu hari nanti akan menjadi platform game po...
Port Sumber Terbuka dari Mesin Game Komersial
Rekreasi mesin game gratis, open source, dan lintas platform dapat digunakan untuk bermain lama serta beberapa judul game yang cukup baru. Artikel ini...