Dokumentasi untuk modul Re untuk Python 3 di . Modul ulang untuk ekspresi reguler

Ekspresi reguler adalah komponen yang sangat populer dari hampir semua bahasa pemrograman. Mereka membantu Anda dengan cepat mengakses informasi yang Anda butuhkan. Secara khusus, mereka digunakan ketika diperlukan untuk memproses teks. Python hadir dengan modul khusus secara default. re, yang bertanggung jawab untuk bekerja dengan ekspresi reguler.

Hari ini kita akan berbicara secara rinci tentang apa itu secara umum, bagaimana bekerja dengan mereka dan bagaimana modul re akan membantu.

Ekspresi reguler: pengantar

Apa kegunaan ekspresi reguler? Hampir semua. Misalnya, ini:

  1. Aplikasi web yang memerlukan validasi teks. Contoh tipikal adalah klien email online.
  2. Proyek lain yang terkait dengan teks, database, dan sebagainya.

Sebelum kita mulai mengurai sintaks, kita harus memahami lebih detail prinsip-prinsip dasar fungsi perpustakaan re dan secara umum, apa yang umumnya baik tentang itu. Kami juga akan memberikan contoh dari praktik nyata, di mana kami akan menjelaskan mekanisme penggunaannya. Anda dapat membuat template seperti itu, cocok untuk Anda melakukan berbagai macam operasi dengan teks.

Apa itu template di perpustakaan Re?

Dengan itu, Anda dapat mencari informasi dari berbagai jenis, mendapatkan informasi yang sesuai dengannya, untuk membuat fungsi lain lebih adaptif. Dan, tentu saja, untuk memproses data ini.

Sebagai contoh, ambil template berikut: s+. Ini berarti karakter ruang apa pun. Jika Anda menambahkan tanda plus padanya, maka ini berarti bahwa polanya mencakup lebih dari satu spasi. Ia bahkan dapat mencocokkan karakter tab yang dipanggil dengan t+.

Sebelum menggunakannya, Anda perlu mengimpor perpustakaan Re. Setelah itu, kami menggunakan perintah khusus untuk mengkompilasi template. Ini dilakukan dalam dua langkah.

>>> impor ulang

>>> regex = re.compile('s+')

Secara khusus, kode ini melakukan operasi kompilasi template yang dapat digunakan. misalnya, untuk mencari spasi (satu atau lebih).

Mendapatkan informasi terpisah dari string yang berbeda menggunakan ekspresi reguler

Misalkan kita memiliki variabel yang berisi informasi berikut.

>>> teks = “””100 INF Informatika

213 MAT Matematika  

156 INDO Bahasa Indonesia»»»

Ini berisi tiga kursus pelatihan. Masing-masing terdiri dari tiga bagian – nomor, kode dan nama. Kami melihat bahwa interval antara kata-kata ini berbeda. Apa yang harus dilakukan untuk memecah baris ini menjadi angka dan kata yang terpisah? Ada dua metode untuk mencapai tujuan ini:

  1. memanggil fungsi re.split.
  2. terapkan fungsi membagi untuk regex.

Berikut adalah contoh penggunaan sintaks masing-masing metode untuk variabel kita.

>>> re.split('s+', teks)  

# atau

>>> regex.split(teks)

Keluaran: ['100', 'INF', 'Ilmu Komputer', '213', 'MAT', 'Matematika', '156', 'ENG', 'Bahasa Inggris']

Secara umum, kedua metode dapat digunakan. Tapi sebenarnya lebih mudah menggunakan ekspresi reguler daripada menggunakan fungsi beberapa kali. re.split.

Menemukan kecocokan dengan tiga fungsi

Katakanlah kita hanya perlu mengekstrak angka dari sebuah string. Apa yang perlu dilakukan untuk ini?

re.findall()

Berikut adalah kasus penggunaan untuk fungsi Temukan semua(), yang, bersama dengan ekspresi reguler, memungkinkan Anda mengekstrak kemunculan satu atau beberapa angka dari variabel teks.

>>> cetak (teks)  

100 INF Informatika

213 MAT Matematika  

156 ENG Bahasa Inggris

>>> regex_num = re.compile('d+')  

>>> regex_num.findall(teks)  

['100', '213', '156']

Bersama dengan simbol d, kami menggunakan templat yang menunjukkan secara mutlak nilai numerik apa pun yang terletak di variabel atau teks. Dan karena kami menambahkan satu + di sana, ini berarti setidaknya satu nomor harus ada. 

Anda juga dapat menggunakan tanda * untuk menentukan bahwa keberadaan digit tidak diperlukan agar kecocokan dapat ditemukan.

Tetapi dalam kasus kami, karena kami menggunakan +, kami mengekstrak dengan Temukan semua() 1 atau lebih penunjukan digital kursus dari teks. Jadi, dalam kasus kami, ekspresi reguler bertindak sebagai pengaturan untuk fungsi tersebut.

re.pencarian() vs pertandingan ulang()

Seperti yang dapat Anda tebak dari nama fungsinya, yang pertama mencari kecocokan dalam teks. Pertanyaan: Apa perbedaan antara Temukan semua? Intinya mengembalikan objek tertentu yang sesuai dengan pola, dan bukan seluruh urutan hasil yang ditemukan dalam bentuk daftar, seperti fungsi sebelumnya.

Pada gilirannya, fungsi re.match melakukan hal yang sama. Hanya sintaksnya saja yang berbeda. Template harus ditempatkan di awal. 

Mari kita ambil contoh yang menunjukkan hal ini.

>>> # buat variabel dengan teks

>>> text2 = «»»Informatika INF

213 MAT Matematika 156″»»  

>>> # kompilasi regex dan cari pola

>>> regex_num = re.compile('d+')  

>>> s = regex_num.search(teks2)  

>>> print('Indeks pertama: ', s.start())  

>>> print('Indeks terakhir: ', s.end())  

>>> print(text2[s.start():s.end()]) 

Indeks pertama: 17 

Indeks terakhir: 20

213

Jika Anda ingin mendapatkan hasil serupa dengan cara yang berbeda, Anda dapat menggunakan fungsi kelompok().

Mengganti bagian teks dengan perpustakaan Re

Untuk mengganti teks, gunakan fungsi re.sub(). Misalkan daftar kursus kami telah berubah sedikit. Kami melihat bahwa setelah setiap nilai digital kami memiliki tab. Tugas kita adalah menggabungkan semua urutan ini menjadi satu baris. Untuk melakukan ini, kita perlu mengganti ekspresi s+ melewati 

Teks aslinya adalah:

# buat variabel dengan teks

>>> teks = “””100 INF t Informatika

213 MAT dan Matematika  

156 BAHASA INGGRIS»»»  

>>> cetak (teks)  

100 INFO Ilmu komputer

213 MAT Matematika  

156 ENG Inggris

Untuk melakukan operasi yang diinginkan, kami menggunakan baris kode berikut.

# ganti satu atau lebih spasi dengan 1

>>> regex = re.compile('s+')  

>>> print(regex.sub(' ', teks))  

Akibatnya, kami memiliki satu baris. 

101 COM Komputer 205 MAT Matematika 189 ENG Bahasa Inggris

Sekarang pertimbangkan masalah lain. Kami tidak dihadapkan dengan tugas menempatkan spasi. Jauh lebih penting bagi kami bahwa semua nama kursus dimulai dari baris baru. Untuk melakukan ini, ekspresi lain digunakan yang menambahkan baris baru ke pengecualian. Ekspresi macam apa ini?

Perpustakaan Re mendukung fitur seperti pencocokan negatif. Ini berbeda dari yang langsung karena berisi tanda seru sebelum garis miring. Artinya, jika kita perlu melewatkan karakter baris baru, maka kita perlu menulis !n sebagai ganti n.

Kami mendapatkan kode berikut.

# hapus semua spasi kecuali baris baru  

>>> regex = re.compile('((?!n)s+)')  

>>> print(regex.sub(' ', teks))  

100 INF Informatika

213 MAT Matematika  

156 ENG Bahasa Inggris

Apa itu grup ekspresi reguler?

Dengan bantuan kelompok ekspresi reguler, kita bisa mendapatkan objek yang diinginkan dalam bentuk elemen yang terpisah, dan tidak dalam satu baris. 

Misalkan kita perlu mendapatkan nomor kursus, kode dan nama tidak dalam satu baris, tetapi sebagai elemen yang terpisah. Untuk menyelesaikan tugas, Anda harus menulis sejumlah besar baris kode yang tidak perlu. 

Sebenarnya, tugas itu bisa sangat disederhanakan. Anda dapat mengkompilasi template untuk semua entri dan hanya menentukan data yang perlu Anda dapatkan dari tanda kurung.

Akan ada sejumlah kecil garis. 

# buat grup tentu saja templat teks dan ekstraklah

>>> course_pattern = '([0-9]+)s*([A-ZY]{3})s*([a-zA-ZoY]{4,})'  

>>> re.findall(course_pattern, teks)  

[('100', 'INF', 'Ilmu Komputer'), ('213', 'MAT', 'Matematika'), ('156', 'ENG', 'Bahasa Inggris')]

Konsep pencocokan "serakah"

Secara standar, ekspresi reguler diprogram untuk mengekstrak jumlah maksimum data yang cocok. Dan bahkan jika Anda membutuhkan lebih sedikit.

Mari kita lihat contoh kode HTML di mana kita perlu mendapatkan tag.

>>> text = “Contoh Pencocokan Ekspresi Reguler Greedy”  

>>> re.findall('', teks)  

['Contoh Pencocokan Ekspresi Reguler Greedy']

Alih-alih mengekstrak hanya satu tag, Python mendapatkan seluruh string. Makanya disebut serakah.

Dan apa yang harus dilakukan untuk mendapatkan hanya tag? Dalam hal ini, Anda perlu menggunakan pencocokan malas. Untuk menentukan ekspresi seperti itu, tanda tanya ditambahkan ke akhir pola.

Anda akan mendapatkan kode berikut dan output dari interpreter.

>>> re.findall('', teks)  

[”, ”]

Jika diperlukan hanya untuk mendapatkan kejadian yang pertama kali ditemui, maka metode tersebut digunakan Cari ().

re.search('', teks).group()  

"

Maka hanya tag pembuka yang akan ditemukan.

Template Ekspresi Populer

Berikut adalah tabel yang berisi pola ekspresi reguler yang paling umum digunakan.

Dokumentasi untuk modul Re untuk Python 3 di . Modul ulang untuk ekspresi reguler

Kesimpulan

Kami hanya mempertimbangkan metode paling dasar untuk bekerja dengan ekspresi reguler. Bagaimanapun, Anda telah melihat betapa pentingnya mereka. Dan di sini tidak ada bedanya apakah perlu untuk mengurai seluruh teks atau fragmen individualnya, apakah perlu menganalisis posting di jejaring sosial atau mengumpulkan data untuk memprosesnya nanti. Ekspresi reguler adalah penolong yang andal dalam hal ini.

Mereka memungkinkan Anda untuk melakukan tugas-tugas seperti:

  1. Menentukan format data, seperti alamat email atau nomor telepon.
  2. Mendapatkan string dan membelahnya menjadi beberapa string yang lebih kecil.
  3. Lakukan berbagai operasi dengan teks, seperti mencari, mengekstrak informasi yang diperlukan, atau mengganti sebagian karakter.

Ekspresi reguler juga memungkinkan Anda untuk melakukan operasi non-sepele. Sekilas, menguasai ilmu ini tidaklah mudah. Namun dalam praktiknya, semuanya terstandarisasi, jadi cukup untuk mengetahuinya sekali, setelah itu alat ini dapat digunakan tidak hanya dengan Python, tetapi juga dalam bahasa pemrograman lainnya. Bahkan Excel menggunakan ekspresi reguler untuk mengotomatisasi pemrosesan data. Jadi adalah dosa untuk tidak menggunakan alat ini.

Tinggalkan Balasan