Dokuméntasi pikeun modul Re pikeun Python 3 di. modul ulang pikeun éksprési biasa

Babasan biasa mangrupikeun komponén anu populer pisan dina ampir sadaya basa pamrograman. Aranjeunna ngabantosan anjeun gancang ngaksés inpormasi anu anjeun peryogikeun. Khususna, aranjeunna dianggo nalika perlu pikeun ngolah téks. Python hadir kalawan modul husus sacara standar. re, nu tanggung jawab gawé bareng ekspresi biasa.

Dinten ieu kami bakal ngobrol di jéntré ngeunaan naon éta sacara umum, kumaha carana digawekeun ku aranjeunna sarta kumaha modul re bakal ngabantosan.

Babasan biasa: bubuka

Naon kagunaan babasan biasa? Méh kabéh. Contona, ieu:

  1. Aplikasi wéb anu peryogi validasi téks. Hiji conto has nyaéta klien mail online.
  2. Sakur proyék séjén anu aya hubunganana sareng téks, pangkalan data sareng saterasna.

Sateuacan urang ngawitan parsing sintaksis, urang kedah ngartos langkung rinci prinsip dasar tina fungsi perpustakaan re sarta sacara umum, naon umumna alus ngeunaan eta. Kami ogé bakal masihan conto tina prakték nyata, dimana kami bakal ngajelaskeun mékanisme pamakeanna. Anjeun tiasa nyiptakeun template sapertos kitu, cocog pikeun anjeun pikeun ngalakukeun rupa-rupa operasi kalayan téks.

Naon template dina perpustakaan ulang?

Kalayan éta, anjeun tiasa milarian inpormasi tina sababaraha jinis, kéngingkeun inpormasi anu saluyu sareng aranjeunna, supados fungsi anu sanés langkung adaptif. Sareng, tangtosna, pikeun ngolah data ieu.

Contona, cokot témplat ieu: s+. Éta hartosna karakter rohangan naon waé. Upami anjeun nambihan tanda tambah kana éta, ieu hartosna pola éta kalebet langkung ti hiji rohangan. Ieu malah bisa cocog karakter tab nu disebut kalawan t+.

Sateuacan nganggo aranjeunna, anjeun kedah ngimpor perpustakaan Re. Saatos éta, kami nganggo paréntah khusus pikeun nyusun témplat. Hal ieu dilakukeun dina dua léngkah.

>>> impor deui

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

Husus, kode ieu ngalakukeun operasi nyusun template anu tiasa dianggo. contona, pikeun milarian spasi (hiji atawa leuwih).

Kéngingkeun inpormasi anu misah tina senar anu béda ngagunakeun éksprési biasa

Anggap urang gaduh variabel anu ngandung inpormasi di handap ieu.

>>> téks = """ 100 INF Informatika

213 MAT Matematika  

156 BASA SUNDA»»»

Ieu ngandung tilu kursus latihan. Tiap di antarana diwangun ku tilu bagian - angka, kode jeung ngaran. Urang nempo yén interval antara kecap ieu béda. Naon anu kudu dipigawé pikeun megatkeun garis ieu kana angka misah jeung kecap? Aya dua cara pikeun ngahontal tujuan ieu:

  1. nelepon hiji fungsi re.beulah.
  2. nerapkeun fungsi Beulah keur regex.

Ieu conto ngagunakeun sintaksis unggal sahiji metodeu pikeun variabel urang.

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

# atawa

>>> regex.split(téks)

Kaluaran: ['100', 'INF', 'Ilmu Komputer', '213', 'MAT', 'Math', '156', 'ENG', 'Inggris']

Sacara umum, duanana métode bisa dipaké. Tapi sabenerna leuwih gampang ngagunakeun ekspresi biasa tinimbang ngagunakeun fungsi sababaraha kali. re.beulah.

Pananjung patandingan sareng tilu fungsi

Anggap urang ngan ukur kedah nimba nomer tina senar. Naon anu kudu dipigawé pikeun ieu?

re.findall()

Ieu kasus pamakéan pikeun fungsi manggihan (), nu, bareng jeung éksprési biasa, ngidinan Anjeun pikeun nimba kajadian hiji atawa leuwih angka tina variabel téks.

>>> citak (teks)  

100 Informatika INF

213 MAT Matematika  

156 BASA SUNDA

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

>>> regex_num.findall(text)  

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

Kalayan simbol d, kami nganggo citakan anu nunjukkeun leres pisan nilai numerik anu aya dina variabel atanapi téks. Sarta saprak urang ditambahkeun hiji + aya, ieu ngandung harti yén sahanteuna hiji angka kudu hadir. 

Anjeun oge bisa make tanda * pikeun nangtukeun yén ayana angka teu diperlukeun pikeun hiji patandingan kapanggih.

Tapi bisi urang, saprak kami dipaké +, kami sasari kalawan manggihan () 1 atanapi langkung sebutan digital tina kursus tina téks. Ku kituna, dina hal urang, ungkapan biasa meta salaku setélan pikeun fungsi.

re.search () vs re.match()

Sakumaha anjeun tiasa nebak tina nami fungsi, anu munggaran milarian patandingan dina téks. Patarosan: Naon bédana antara manggihan? Intina nyaéta yén éta ngabalikeun objek khusus anu cocog sareng pola, sareng henteu sadayana sekuen hasil anu kapanggih dina bentuk daptar, sapertos fungsi sateuacana.

Dina gilirannana, fungsi re.match lakukeun sami. Ngan sintaksisna béda. Citakan kudu ditempatkeun di awal. 

Hayu urang nyandak conto anu nunjukkeun ieu.

>>> # nyieun variabel jeung téks

>>> text2 = «»»INF Informatika

213 MAT Matematika 156″»»  

>>> # kompilasi regex sareng milarian pola

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

>>> s = regex_num.search(text2)  

>>> print('Indéks munggaran:', s.start())  

>>> print('Indéks panungtungan:', s.end())  

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

Indéks munggaran: 17 

Indéks panungtungan: 20

213

Upami anjeun hoyong kéngingkeun hasil anu sami dina cara anu béda, anjeun tiasa nganggo fungsina golongan().

Ngaganti bagian tina téks ku perpustakaan Re

Pikeun ngaganti téks, paké pungsi re.sub(). Anggap daptar kursus urang geus robah saeutik. Urang nempo yén sanggeus unggal nilai digital urang boga tab. Tugas urang nyaéta ngagabungkeun sakabeh runtuyan ieu kana hiji garis. Jang ngalampahkeun ieu, urang kudu ngaganti ekspresi s + maot 

Tulisan aslina nyaéta:

# Jieun variabel sareng téks

>>> téks = """ 100 INF t Informatika

213 MAT t Matematika  

156 BAHASA INGGRIS»»»  

>>> citak (teks)  

100 INFO Élmu komputer

213 MAT matematika  

156 ENG Inggris

Pikeun ngalakukeun operasi anu dipikahoyong, kami nganggo garis kode di handap ieu.

# ngaganti hiji atawa leuwih spasi ku 1

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

>>> print(regex.sub(' ', téks))  

Hasilna, urang gaduh hiji garis. 

101 COM Komputer 205 MAT Matematika 189 ENG Inggris

Ayeuna mertimbangkeun masalah sejen. Kami henteu nyanghareupan tugas nempatkeun rohangan. Éta langkung penting pikeun urang yén sadaya nami kursus dimimitian dina jalur énggal. Jang ngalampahkeun ieu, éksprési sejen dipaké nu nambihan newline kana iwal. Naon jenis ekspresi ieu?

taman pustaka Re ngarojong fitur sapertos cocog négatip. Ieu béda ti langsung nu ngandung hiji titik exclamation saméméh slash nu. Nyaéta, upami urang kedah ngalangkungan karakter baris énggal, maka urang kedah nyerat !n tibatan n.

Simkuring meunang kodeu handap.

# miceun sadaya rohangan kecuali baris anyar  

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

>>> print(regex.sub(' ', téks))  

100 Informatika INF

213 MAT Matematika  

156 BASA SUNDA

Naon grup ekspresi biasa?

Kalayan bantosan grup éksprési biasa, urang tiasa kéngingkeun objék anu dipikahoyong dina bentuk unsur anu misah, sanés dina hiji garis. 

Anggap urang kudu meunang jumlah tangtu, kode jeung ngaran teu dina hiji baris, tapi salaku elemen misah. Pikeun ngarengsekeun tugas, anjeun kedah nyerat sajumlah ageung garis kode anu teu perlu. 

Kanyataanna, tugas bisa greatly disederhanakeun. Anjeun tiasa nyusun témplat pikeun sadaya éntri sareng ngan ukur nangtukeun data anu anjeun peryogikeun tina kurung.

Bakal aya sajumlah leutik pisan garis. 

# jieun grup témplat téks tangtu sareng nimba aranjeunna

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

>>> re.findall(kursus_pola, téks)  

[('100', 'INF', 'Élmu Komputer'), ('213', 'MAT', 'Math'), ('156', 'ENG', 'Inggris')]

Konsep "rakus" cocog

Sacara standar, ekspresi biasa diprogram pikeun nimba jumlah maksimum data anu cocog. Sareng upami anjeun peryogi langkung seueur.

Hayu urang tingali conto kode HTML dimana urang kedah kéngingkeun tag.

>>> text = "Conto Papasingan Babasan Biasa Rakus"  

>>> re.findall('', téks)  

['Conto Babasan Biasa Sarakah']

Gantina extracting ngan hiji tag, Python meunang sakabeh string. Éta sababna disebut sarakah.

Sareng naon anu kudu dilakukeun pikeun ngan ukur tag? Dina hal ieu, anjeun kudu make cocog puguh. Pikeun nangtukeun ekspresi sapertos kitu, tanda tanya ditambahkeun kana tungtung pola.

Anjeun bakal nampi kodeu di handap ieu sareng kaluaran juru.

>>> re.findall('', téks)  

[", ”]

Lamun diperlukeun pikeun meunangkeun ngan kajadian kahiji encountered, mangka métode dipaké milarian ().

re.search('', téks).group()  

"

Lajeng ngan tag bubuka bakal kapanggih.

Témplat éksprési populér

Ieu tabel anu ngandung pola ekspresi biasa anu paling sering dianggo.

Dokuméntasi pikeun modul Re pikeun Python 3 di. modul ulang pikeun éksprési biasa

kacindekan

Kami ngan ukur nganggap cara anu paling dasar pikeun damel sareng ekspresi biasa. Dina naon waé, anjeun parantos ningali kumaha pentingna aranjeunna. Sareng di dieu henteu aya bédana naha éta kedah nga-parse sadayana téks atanapi fragmen individuna, naha perlu nganalisa tulisan dina jaringan sosial atanapi ngumpulkeun data pikeun ngolah éta engké. Babasan biasa mangrupikeun pembantu anu dipercaya dina hal ieu.

Aranjeunna ngamungkinkeun anjeun ngalaksanakeun tugas sapertos:

  1. Nangtukeun format data, sapertos alamat email atanapi nomer telepon.
  2. Kéngingkeun senar sareng ngabagi kana sababaraha senar anu langkung alit.
  3. Laksanakeun sababaraha operasi nganggo téks, sapertos milarian, nimba inpormasi anu diperyogikeun, atanapi ngagentos bagian tina karakter.

Babasan biasa ogé ngamungkinkeun anjeun pikeun ngalakukeun operasi anu henteu penting. Dina glance kahiji, mastering elmu ieu teu gampang. Tapi dina prakna, sagalana geus standardized, jadi éta cukup pikeun angka kaluar sakali, nu satutasna alat ieu bisa dipaké teu ukur dina Python, tapi ogé dina sagala basa programming lianna. Malah Excel ngagunakeun éksprési biasa pikeun ngajadikeun otomatis ngolah data. Janten dosa henteu nganggo alat ieu.

Leave a Reply