Dokumentasi untuk modul Re untuk Python 3 dalam. Modul semula untuk ungkapan biasa

Ungkapan biasa adalah komponen yang sangat popular dalam hampir semua bahasa pengaturcaraan. Mereka membantu anda mengakses maklumat yang anda perlukan dengan cepat. Khususnya, ia digunakan apabila perlu untuk memproses teks. Python datang dengan modul khas secara lalai. re, yang bertanggungjawab untuk bekerja dengan ungkapan biasa.

Hari ini kita akan bercakap secara terperinci tentang apa itu secara umum, bagaimana untuk bekerja dengan mereka dan bagaimana modul re akan bantu.

Ungkapan biasa: pengenalan

Apakah kegunaan ungkapan biasa? Hampir semua. Sebagai contoh, ini:

  1. Aplikasi web yang memerlukan pengesahan teks. Contoh biasa ialah pelanggan mel dalam talian.
  2. Sebarang projek lain yang berkaitan dengan teks, pangkalan data dan sebagainya.

Sebelum kita mula menghuraikan sintaks, kita harus memahami dengan lebih terperinci prinsip asas fungsi perpustakaan re dan secara umum, apa yang secara amnya baik mengenainya. Kami juga akan memberikan contoh dari amalan sebenar, di mana kami akan menerangkan mekanisme penggunaannya. Anda boleh mencipta templat sedemikian, sesuai untuk anda melakukan pelbagai jenis operasi dengan teks.

Apakah templat dalam perpustakaan Re?

Dengan itu, anda boleh mencari maklumat dari pelbagai jenis, mendapatkan maklumat yang sepadan dengannya, untuk menjadikan fungsi lain lebih adaptif. Dan, sudah tentu, untuk memproses data ini.

Sebagai contoh, ambil templat berikut: s+. Ia bermaksud sebarang watak ruang. Jika anda menambahkan tanda tambah padanya, maka ini bermakna corak tersebut merangkumi lebih daripada satu ruang. Ia juga boleh memadankan aksara tab yang dipanggil dengan t+.

Sebelum menggunakannya, anda perlu mengimport perpustakaan Re. Selepas itu, kami menggunakan arahan khas untuk menyusun templat. Ini dilakukan dalam dua langkah.

>>> import semula

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

Secara khusus, kod ini menjalankan operasi menyusun templat yang boleh digunakan. contohnya, untuk mencari ruang (satu atau lebih).

Mendapatkan maklumat berasingan daripada rentetan yang berbeza menggunakan ungkapan biasa

Katakan kita mempunyai pembolehubah yang mengandungi maklumat berikut.

>>> teks = “””100 Informatik INF

213 MAT Matematik  

156 ENG Inggeris»»»

Ia mengandungi tiga kursus latihan. Setiap daripada mereka terdiri daripada tiga bahagian - nombor, kod dan nama. Kami melihat bahawa selang antara perkataan ini berbeza. Apa yang perlu dilakukan untuk memecahkan baris ini kepada nombor dan perkataan yang berasingan? Terdapat dua kaedah untuk mencapai matlamat ini:

  1. memanggil fungsi re.split.
  2. menggunakan fungsi berpecah Untuk regex.

Berikut ialah contoh menggunakan sintaks setiap kaedah untuk pembolehubah kami.

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

# atau

>>> regex.split(teks)

Output: ['100', 'INF', 'Sains Komputer', '213', 'MAT', 'Math', '156', 'ENG', 'English']

Secara umum, kedua-dua kaedah boleh digunakan. Tetapi sebenarnya lebih mudah untuk menggunakan ungkapan biasa daripada menggunakan fungsi itu beberapa kali. re.split.

Mencari padanan dengan tiga fungsi

Katakan kita perlu mengekstrak nombor sahaja daripada rentetan. Apa yang perlu dilakukan untuk ini?

re.findall()

Berikut ialah kes penggunaan untuk fungsi tersebut findall(), yang, bersama-sama dengan ungkapan biasa, membolehkan anda mengekstrak kejadian satu atau lebih nombor daripada pembolehubah teks.

>>> cetak(teks)  

100 Informatik INF

213 MAT Matematik  

156 ENG Inggeris

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

>>> regex_num.findall(teks)  

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

Bersama-sama dengan simbol d, kami menggunakan templat yang menunjukkan sebarang nilai berangka yang terletak dalam pembolehubah atau teks. Dan kerana kami menambah satu + di sana, ini bermakna sekurang-kurangnya satu nombor mesti ada. 

Anda juga boleh menggunakan tanda * untuk menyatakan bahawa kehadiran digit tidak diperlukan untuk padanan ditemui.

Tetapi dalam kes kami, sejak kami menggunakan +, kami mengekstrak dengan findall() 1 atau lebih sebutan digital kursus daripada teks. Oleh itu, dalam kes kami, ungkapan biasa bertindak sebagai tetapan untuk fungsi.

re.search() lwn re.match()

Seperti yang anda boleh meneka dari nama fungsi, carian pertama untuk padanan dalam teks. Soalan: Apakah perbezaan antara jumpa? Intinya ialah ia mengembalikan objek tertentu yang sepadan dengan corak, dan bukan keseluruhan jujukan hasil yang ditemui dalam bentuk senarai, seperti fungsi sebelumnya.

Sebaliknya, fungsi re.match melakukan perkara yang sama. Cuma sintaksnya berbeza. Templat mesti diletakkan pada permulaan. 

Mari kita ambil contoh yang menunjukkan ini.

>>> # buat pembolehubah dengan teks

>>> text2 = «»»INF Informatik

213 MAT Matematik 156″»»  

>>> # susun regex dan cari corak

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

>>> s = regex_num.search(teks2)  

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

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

>>> cetak(teks2[s.start():s.end()]) 

Indeks pertama: 17 

Indeks terakhir: 20

213

Jika anda ingin mendapatkan hasil yang serupa dengan cara yang berbeza, anda boleh menggunakan fungsi tersebut kumpulan().

Menggantikan sebahagian teks dengan pustaka Re

Untuk menggantikan teks, gunakan fungsi re.sub(). Katakan senarai kursus kami telah berubah sedikit. Kami melihat bahawa selepas setiap nilai digital kami mempunyai tab. Tugas kami adalah untuk menggabungkan semua urutan ini menjadi satu baris. Untuk melakukan ini, kita perlu menggantikan ungkapan s+ untuk lulus 

Teks asalnya ialah:

# buat pembolehubah dengan teks

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

213 MAT t Matematik  

156 BAHASA MELAYU Bahasa Inggeris»»»  

>>> cetak(teks)  

100 MAKLUMAT Sains komputer

213 MAT Matematik  

156 ENG English

Untuk melaksanakan operasi yang diingini, kami menggunakan baris kod berikut.

# gantikan satu atau lebih ruang dengan 1

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

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

Akibatnya, kami mempunyai satu baris. 

101 COM Komputer 205 MAT Matematik 189 ENG Inggeris

Sekarang pertimbangkan masalah lain. Kami tidak berdepan dengan tugas meletakkan ruang. Adalah lebih penting bagi kami bahawa semua nama kursus bermula pada baris baharu. Untuk melakukan ini, ungkapan lain digunakan yang menambahkan baris baharu pada pengecualian. Apakah jenis ungkapan ini?

Perpustakaan Re menyokong ciri seperti padanan negatif. Ia berbeza daripada yang langsung kerana ia mengandungi tanda seru sebelum garis miring. Iaitu, jika kita perlu melangkau aksara baris baharu, maka kita perlu menulis !n dan bukannya n.

Kami mendapat kod berikut.

# alih keluar semua ruang kecuali baris baharu  

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

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

100 Informatik INF

213 MAT Matematik  

156 ENG Inggeris

Apakah kumpulan ungkapan biasa?

Dengan bantuan kumpulan ungkapan biasa, kita boleh mendapatkan objek yang dikehendaki dalam bentuk elemen berasingan, dan bukan dalam satu baris. 

Katakan kita perlu mendapatkan nombor kursus, kod dan nama bukan dalam satu baris, tetapi sebagai elemen yang berasingan. Untuk menyelesaikan tugas, anda perlu menulis sejumlah besar baris kod yang tidak diperlukan. 

Malah, tugas itu boleh dipermudahkan. Anda boleh menyusun templat untuk semua entri dan hanya tentukan data yang anda perlu dapatkan daripada kurungan.

Akan ada bilangan baris yang sangat kecil. 

# buat kumpulan templat teks kursus dan ekstraknya

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

>>> re.findall(corak_kursus, teks)  

[('100', 'INF', 'Sains Komputer'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'English')]

Konsep padanan "tamak".

Mengikut standard, ungkapan biasa diprogramkan untuk mengekstrak jumlah maksimum data yang sepadan. Dan walaupun anda memerlukan lebih sedikit.

Mari lihat contoh kod HTML di mana kita perlu mendapatkan teg.

>>> teks = "Contoh Padanan Ungkapan Biasa yang Tamak"  

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

['Contoh Padanan Ungkapan Biasa yang Tamak']

Daripada mengekstrak hanya satu tag, Python mendapat keseluruhan rentetan. Itulah sebabnya ia dipanggil tamak.

Dan apa yang perlu dilakukan untuk mendapatkan tag sahaja? Dalam kes ini, anda perlu menggunakan padanan malas. Untuk menentukan ungkapan sedemikian, tanda soal ditambah pada penghujung corak.

Anda akan mendapat kod berikut dan output penterjemah.

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

[", ”]

Sekiranya diperlukan untuk mendapatkan hanya kejadian pertama yang ditemui, maka kaedah itu digunakan cari ().

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

"

Kemudian hanya tag pembuka akan ditemui.

Templat Ungkapan Popular

Berikut ialah jadual yang mengandungi corak ungkapan biasa yang paling biasa digunakan.

Dokumentasi untuk modul Re untuk Python 3 dalam. Modul semula untuk ungkapan biasa

Kesimpulan

Kami telah mempertimbangkan hanya kaedah paling asas untuk bekerja dengan ungkapan biasa. Walau apa pun, anda telah melihat betapa pentingnya mereka. Dan di sini tidak ada bezanya sama ada perlu menghuraikan keseluruhan teks atau serpihan individunya, sama ada perlu menganalisis siaran pada rangkaian sosial atau mengumpul data untuk memprosesnya kemudian. Ekspresi biasa adalah pembantu yang boleh dipercayai dalam perkara ini.

Mereka membenarkan anda melaksanakan tugas seperti:

  1. Menentukan format data, seperti alamat e-mel atau nombor telefon.
  2. Mendapatkan rentetan dan membelahnya kepada beberapa rentetan yang lebih kecil.
  3. Lakukan pelbagai operasi dengan teks, seperti mencari, mengekstrak maklumat yang diperlukan, atau menggantikan sebahagian daripada aksara.

Ungkapan biasa juga membolehkan anda melakukan operasi bukan remeh. Sekali pandang, menguasai ilmu ini bukanlah mudah. Tetapi dalam praktiknya, semuanya diseragamkan, jadi cukup untuk memikirkannya sekali, selepas itu alat ini boleh digunakan bukan sahaja dalam Python, tetapi juga dalam mana-mana bahasa pengaturcaraan lain. Malah Excel menggunakan ungkapan biasa untuk mengautomasikan pemprosesan data. Jadi berdosa jika tidak menggunakan alat ini.

Sila tinggalkan balasan anda