Python RegEx: re.match (), re.search (), re.findall () dengan Contoh

Apakah Ekspresi Biasa di Python?

KE Ungkapan Biasa (RE) dalam bahasa pengaturcaraan adalah rentetan teks khas yang digunakan untuk menerangkan corak carian. Ia sangat berguna untuk mengekstrak maklumat dari teks seperti kod, fail, log, hamparan atau bahkan dokumen.

Semasa menggunakan ungkapan biasa Python, perkara pertama yang perlu diketahui adalah bahawa pada dasarnya semuanya adalah watak, dan kita menulis corak untuk memadankan urutan watak tertentu yang juga disebut rentetan. Huruf Ascii atau latin adalah huruf yang terdapat pada papan kekunci anda dan Unicode digunakan untuk memadankan teks asing. Ia merangkumi angka dan tanda baca dan semua watak khas seperti $ # @!%, Dll.

Dalam tutorial Python RegEx ini, kita akan belajar-

Sebagai contoh, ungkapan biasa Python dapat memberitahu program untuk mencari teks tertentu dari rentetan dan kemudian mencetak hasilnya sesuai. Ungkapan boleh merangkumi

  • Pemadanan teks
  • Pengulangan
  • Bercabang
  • Corak-komposisi dll.

Ungkapan biasa atau RegEx dalam Python dilambangkan sebagai RE (REs, regexes atau regex pattern) diimport melalui modul semula . Python menyokong ekspresi biasa melalui perpustakaan. RegEx di Python menyokong pelbagai perkara seperti Watak pengubah, pengenal dan ruang putih .

Pengenal Pengubah Watak ruang putih Pelarian diperlukan
d = sebarang nombor (satu digit) d mewakili digit.Ex: d {1,5} ia akan menyatakan digit antara 1,5 seperti 424,444,545 dll. n = barisan baru. + *? [] $ ^ () {} |
D = apa sahaja kecuali nombor (bukan digit)+ = sepadan dengan 1 atau lebih s = ruang
s = ruang (tab, ruang, barisan baru dll.)? = sepadan dengan 0 atau 1 t = tab
S = apa sahaja kecuali ruang* = 0 atau lebih e = melarikan diri
w = huruf (Padankan aksara alfanumerik, termasuk '_')$ padanan hujung rentetan r = perjalanan pulang
W = apa-apa kecuali huruf (Sesuai dengan watak bukan alfanumerik tidak termasuk '_')^ padanan permulaan rentetan f = suapan borang
. = apa-apa kecuali huruf (noktah)| sepadan sama ada atau x / y-----------------
b = watak apa pun kecuali baris baru[] = julat atau 'varians'----------------
.{x} = jumlah kod sebelumnya-----------------

Sintaks Ungkapan Biasa (RE)

 import re 
  • Modul 're' disertakan dengan Python yang terutama digunakan untuk pencarian dan manipulasi rentetan
  • Juga sering digunakan untuk laman web 'Mengikis' (ekstrak sejumlah besar data dari laman web)

Kami akan memulakan tutorial ekspresi dengan latihan sederhana ini dengan menggunakan ungkapan (w +) dan (^).

Contoh w + dan ^ Ungkapan

  • '^': Ungkapan ini sesuai dengan permulaan rentetan
  • 'w + ': Ungkapan ini sesuai dengan watak alfanumerik dalam rentetan

Di sini kita akan melihat Contoh Python RegEx bagaimana kita boleh menggunakan ungkapan w + dan ^ dalam kod kita. Kami merangkumi fungsi re.findall () dalam Python, kemudian dalam tutorial ini tetapi untuk sementara waktu kita hanya memfokuskan pada ekspresi w + dan ^.

Sebagai contoh, untuk rentetan 'on2vhf kami, pendidikan itu menyeronokkan' jika kami menjalankan kod dengan w + dan ^, ia akan memberikan output 'on2vhf'.

 import re xx = 'on2vhf,education is fun' r1 = re.findall(r'^w+',xx) print(r1)

Ingat, jika anda mengeluarkan tanda + dari w +, output akan berubah, dan hanya akan memberikan watak pertama huruf pertama, iaitu, [g]

Contoh ungkapan dalam fungsi re.split

  • 's': Ungkapan ini digunakan untuk membuat ruang dalam rentetan

Untuk memahami bagaimana RegEx di Python ini berfungsi, kita mulakan dengan Contoh Python RegEx ringkas fungsi split. Dalam contohnya, kami telah membelah setiap kata menggunakan fungsi 're.split' dan pada masa yang sama kami telah menggunakan ungkapan yang memungkinkan untuk menguraikan setiap perkataan dalam rentetan secara berasingan.

Apabila anda melaksanakan kod ini, ia akan memberi anda output ['kita', 'adalah', 'membelah', 'the', 'kata-kata'].

Sekarang, mari lihat apa yang berlaku jika anda membuang '' dari s. Tidak ada abjad dalam output, ini kerana kami telah mengeluarkan '' dari rentetan, dan ia menilai 's' sebagai watak biasa dan dengan demikian membagi kata di mana sahaja ia menemukan 's' dalam rentetan.

Begitu juga, terdapat siri ungkapan biasa Python lain yang boleh anda gunakan dalam pelbagai cara di Python seperti d, D, $, ., B, dll.

Inilah kod lengkap

 import re xx = 'on2vhf,education is fun' r1 = re.findall(r'^w+', xx) print((re.split(r's','we are splitting the words'))) print((re.split(r's','split the words')))

Seterusnya, kita akan melihat jenis kaedah yang digunakan dengan ungkapan biasa di Python.

Menggunakan kaedah ungkapan biasa

Pakej 're' menyediakan beberapa kaedah untuk benar-benar melakukan pertanyaan pada rentetan input. Kita akan melihat kaedah re di Python:

  • main semula ()
  • cari semula ()
  • re.findall ()

Catatan : Berdasarkan ungkapan biasa, Python menawarkan dua operasi primitif yang berbeza. Kaedah pertandingan memeriksa pertandingan hanya pada awal rentetan sementara carian memeriksa pertandingan di mana sahaja rentetan.

main semula ()

main semula () fungsi re dalam Python akan mencari corak ungkapan biasa dan mengembalikan kejadian pertama. Kaedah Python RegEx Match memeriksa perlawanan hanya pada awal rentetan. Jadi, jika perlawanan dijumpai di baris pertama, ia mengembalikan objek perlawanan. Tetapi jika perlawanan dijumpai di beberapa baris lain, fungsi Python RegEx Match kembali nol.

Sebagai contoh, pertimbangkan kod fungsi Python re.match () berikut. Ungkapan 'w +' dan ' W' akan sesuai dengan perkataan yang bermula dengan huruf 'g' dan selepas itu, apa-apa yang tidak dimulakan dengan 'g' tidak dikenal pasti. Untuk memeriksa padanan bagi setiap elemen dalam senarai atau rentetan, kami menjalankan forloop dalam Contoh reatch (Python re.match) ini.

re.search (): Mencari Corak dalam Teks

cari semula () fungsi akan mencari corak ungkapan biasa dan mengembalikan kejadian pertama. Tidak seperti Python re.match (), ia akan memeriksa semua baris rentetan input. Fungsi Python re.search () mengembalikan objek padanan apabila corak dijumpai dan batal jika corak tidak dijumpai

Untuk menggunakan fungsi carian (), anda perlu mengimport modul Python re terlebih dahulu dan kemudian melaksanakan kodnya. Fungsi Python re.search () mengambil 'pattern' dan 'text' untuk mengimbas dari rentetan utama kami

Contohnya di sini kita mencari dua rentetan literal 'Uji perisian' 'on2vhf', dalam rentetan teks 'Uji Perisian memang menyeronokkan'. Untuk 'pengujian perisian', kami menjumpai pertandingan sehingga mengembalikan output Python re.search () Contoh sebagai 'found a match', sedangkan untuk kata 'on2vhf' kami tidak dapat dijumpai dalam string sehingga mengembalikan output sebagai 'Tidak sesuai '.

re.findall ()

cari () modul digunakan untuk mencari semua kejadian yang sesuai dengan corak tertentu. Sebaliknya, modul carian () hanya akan mengembalikan kejadian pertama yang sesuai dengan corak yang ditentukan. findall () akan berulang pada semua baris fail dan akan mengembalikan semua padanan corak yang tidak bertindih dalam satu langkah.

Sebagai contoh, di sini kita mempunyai senarai alamat e-mel, dan kita mahu semua alamat e-mel dikeluarkan dari senarai, kita menggunakan kaedah re.findall () di Python. Ia akan menemui semua alamat e-mel dari senarai.

Berikut adalah kod lengkap untuk Contoh re.findall ()

 import re list = ['on2vhf get', 'on2vhf give', 'guru Selenium'] for element in list: z = re.match('(gw+)W(gw+)', element) if z: print((z.groups())) patterns = ['software testing', 'on2vhf'] text = 'software testing is fun?' for pattern in patterns: print('Looking for '%s' in '%s' ->' % (pattern, text), end=' ') if re.search(pattern, text): print('found a match!') else: print('no match') abc = This email address is being protected from spambots. You need JavaScript enabled to view it., This email address is being protected from spambots. You need JavaScript enabled to view it., This email address is being protected from spambots. You need JavaScript enabled to view it.' emails = re.findall(r'[w.-]+@[w.-]+', abc) for email in emails: print(email)

Bendera Python

Banyak Kaedah Python Regex dan fungsi Regex mengambil argumen pilihan yang disebut Flags. Bendera ini dapat mengubah makna corak Python Regex yang diberikan. Untuk memahami ini, kita akan melihat satu atau dua contoh Bendera ini.

Pelbagai bendera yang digunakan di Python termasuk

Sintaks untuk Bendera Regex Apa yang dilakukan oleh bendera ini
[re.M]Buat permulaan / akhir pertimbangkan setiap baris
[re.I]Ia mengabaikan kes
[re.S]Buat [. ]
[re.U]Jadikan { w, W, b, B} mengikuti peraturan Unicode
[re.L]Jadikan { w, W, b, B} mengikuti tempat
[re.X]Benarkan komen di Regex

Contoh re.M atau Bendera Multiline

Dalam multiline watak corak [^] sepadan dengan watak pertama rentetan dan permulaan setiap baris (mengikuti segera setelah setiap baris baru). Sementara ungkapan kecil 'w' digunakan untuk menandakan ruang dengan watak. Apabila anda menjalankan kod pemboleh ubah pertama 'k1' hanya mencetak karakter 'g' untuk kata on2vhf, sementara ketika anda menambahkan bendera multiline, ia mengeluarkan watak pertama dari semua elemen dalam rentetan.

Inilah kod

 import re xx = '''on2vhf careeron2vhf selenium''' k1 = re.findall(r'^w', xx) k2 = re.findall(r'^w', xx, re.MULTILINE) print(k1) print(k2)
  • Kami menyatakan pemboleh ubah xx untuk string 'on2vhf…. careeron2vhf… .selenium ’
  • Jalankan kod tanpa menggunakan flag multiline, ia memberikan output hanya 'g' dari garisan
  • Jalankan kod dengan bendera 'multiline', apabila anda mencetak 'k2' ia memberikan output sebagai 'g', 'c' dan 's'
  • Jadi, perbezaan yang dapat kita lihat selepas dan sebelum menambahkan berbilang baris dalam contoh di atas.

Begitu juga, anda juga boleh menggunakan bendera Python lain seperti re.U (Unicode), re.L (Follow locale), re.X (Allow Comment), dll.

Python 2 Contoh

Kod di atas adalah contoh Python 3, Sekiranya anda ingin menjalankan di Python 2 sila pertimbangkan untuk mengikuti kod ini.

 # Example of w+ and ^ Expression import re xx = 'on2vhf,education is fun' r1 = re.findall(r'^w+',xx) print r1 # Example of s expression in re.split function import re xx = 'on2vhf,education is fun' r1 = re.findall(r'^w+', xx) print (re.split(r's','we are splitting the words')) print (re.split(r's','split the words')) # Using re.findall for text import re list = ['on2vhf get', 'on2vhf give', 'guru Selenium'] for element in list: z = re.match('(gw+)W(gw+)', element) if z: print(z.groups()) patterns = ['software testing', 'on2vhf'] text = 'software testing is fun?' for pattern in patterns: print 'Looking for '%s' in '%s' ->' % (pattern, text), if re.search(pattern, text): print 'found a match!' else: print 'no match' abc = This email address is being protected from spambots. You need JavaScript enabled to view it., This email address is being protected from spambots. You need JavaScript enabled to view it., This email address is being protected from spambots. You need JavaScript enabled to view it.' emails = re.findall(r'[w.-]+@[w.-]+', abc) for email in emails: print email # Example of re.M or Multiline Flags import re xx = '''on2vhf careeron2vhf selenium''' k1 = re.findall(r'^w', xx) k2 = re.findall(r'^w', xx, re.MULTILINE) print k1 print k2 

Ringkasan

Ungkapan biasa dalam a bahasa pengaturcaraan adalah rentetan teks khas yang digunakan untuk menerangkan corak carian. Ini merangkumi angka dan tanda baca dan semua watak khas seperti $ # @!%, Dan lain-lain. Ungkapan boleh merangkumi literal

  • Pemadanan teks
  • Pengulangan
  • Bercabang
  • Corak-komposisi dll.

Di Python, ungkapan biasa dilambangkan sebagai RE (REs, regexes atau regex pattern) disematkan melalui modul Python re.

  • Modul 're' disertakan dengan Python yang terutama digunakan untuk pencarian dan manipulasi rentetan
  • Juga sering digunakan untuk laman web 'Mengikis' (mengekstrak sejumlah besar data dari laman web)
  • Kaedah Penyataan Biasa merangkumi re.match (), re.search () & re.findall ()
  • Kaedah penggantian Python RegEx lain adalah sub () dan subn () yang digunakan untuk menggantikan rentetan padanan dalam re
  • Bendera Python Banyak Kaedah Python Regex dan fungsi Regex mengambil argumen pilihan yang disebut Flags
  • Bendera ini dapat mengubah makna corak Regex yang diberikan
  • Pelbagai bendera Python yang digunakan dalam Kaedah Regex adalah re.M, re.I, re.S, dll.