Python Regular Expressions
Kalimat biasa adalah urutan karakter khusus, dapat membantu Anda untuk dengan mudah memeriksa apakah string cocok dengan pola.
Python kembali modul meningkat sejak versi 1.5, pola ekspresi reguler yang menyediakan Perl-gaya.
re modul memungkinkan bahasa Python memiliki semua fitur dari ekspresi reguler.
mengkompilasi fungsi untuk menghasilkan objek ekspresi reguler dari string pola dan parameter bendera opsional. Objek ini memiliki seperangkat metode untuk pencocokan ekspresi reguler dan substitusi.
re modul juga menyediakan metode yang konsisten dengan fitur-fitur ini fungsi yang menggunakan pola string sebagai argumen pertama mereka.
Bagian ini memperkenalkan Python fungsi pemrosesan yang umum ekspresi reguler.
fungsi re.match
re.match mencoba untuk mencocokkan pola dari posisi awal dari string, jika tidak pencocokan posisi awal berhasil, pertandingan () mengembalikan none.
Fungsi sintaks:
re.match(pattern, string, flags=0)
Fungsi parameter:
parameter | deskripsi |
---|---|
pola | Mencocokkan ekspresi reguler |
tali | string untuk mencocokkan. |
bendera | Bendera, pencocokan ekspresi reguler digunakan untuk mengontrol, seperti: apakah kasus-sensitif, multi-line pertandingan, dan sebagainya. |
Metode pertandingan re.match sukses mengembalikan sebuah objek pertandingan, jika tidak ada.
Kita dapat menggunakan grup (num) atau kelompok () fungsi untuk mendapatkan benda-benda yang cocok sesuai ekspresi.
Pencocokan metode objek | deskripsi |
---|---|
Kelompok (num = 0) | Seluruh pencocokan ekspresi string, kelompok () bisa memasukkan lebih dari satu nomor kelompok, dalam hal ini akan mengembalikan nilai yang sesuai dengan kelompok-kelompok tupel. |
kelompok () | Ia mengembalikan tuple dari semua kelompok string, dari 1 ke nomor yang terdapat dalam kelompok. |
Contoh 1:
#!/usr/bin/python # -*- coding: UTF-8 -*- import re print(re.match('www', 'www.w3write.com').span()) # 在起始位置匹配 print(re.match('com', 'www.w3write.com')) # 不在起始位置匹配
Jalankan contoh di atas output:
(0, 3) None
Contoh 2:
#!/usr/bin/python import re line = "Cats are smarter than dogs" matchObj = re.match( r'(.*) are (.*?) .*', line, re.M|re.I) if matchObj: print "matchObj.group() : ", matchObj.group() print "matchObj.group(1) : ", matchObj.group(1) print "matchObj.group(2) : ", matchObj.group(2) else: print "No match!!"
Hasil dari contoh di atas adalah sebagai berikut:
matchObj.group() : Cats are smarter than dogs matchObj.group(1) : Cats matchObj.group(2) : smarter
metode re.search
re.search memindai seluruh string dan mengembalikan pertandingan pertama yang sukses.
Fungsi sintaks:
re.search(pattern, string, flags=0)
Fungsi parameter:
parameter | deskripsi |
---|---|
pola | Mencocokkan ekspresi reguler |
tali | string untuk mencocokkan. |
bendera | Bendera, pencocokan ekspresi reguler digunakan untuk mengontrol, seperti: apakah kasus-sensitif, multi-line pertandingan, dan sebagainya. |
Metode pertandingan re.search sukses mengembalikan sebuah objek pertandingan, jika tidak ada.
Kita dapat menggunakan grup (num) atau kelompok () fungsi untuk mendapatkan benda-benda yang cocok sesuai ekspresi.
Pencocokan metode objek | deskripsi |
---|---|
Kelompok (num = 0) | Seluruh pencocokan ekspresi string, kelompok () bisa memasukkan lebih dari satu nomor kelompok, dalam hal ini akan mengembalikan nilai yang sesuai dengan kelompok-kelompok tupel. |
kelompok () | Ia mengembalikan tuple dari semua kelompok string, dari 1 ke nomor yang terdapat dalam kelompok. |
Contoh 1:
#!/usr/bin/python # -*- coding: UTF-8 -*- import re print(re.search('www', 'www.w3write.com').span()) # 在起始位置匹配 print(re.search('com', 'www.w3write.com').span()) # 不在起始位置匹配
Jalankan contoh di atas output:
(0, 3) (11, 14)
Contoh 2:
#!/usr/bin/python import re line = "Cats are smarter than dogs"; searchObj = re.search( r'(.*) are (.*?) .*', line, re.M|re.I) if searchObj: print "searchObj.group() : ", searchObj.group() print "searchObj.group(1) : ", searchObj.group(1) print "searchObj.group(2) : ", searchObj.group(2) else: print "Nothing found!!"Hasil dari contoh di atas adalah sebagai berikut:
searchObj.group() : Cats are smarter than dogs searchObj.group(1) : Cats searchObj.group(2) : smarter
Perbedaan re.match dan re.search
re.match cocok hanya awal dari string, jika awal string tidak memenuhi ekspresi reguler, pertandingan gagal, fungsi mengembalikan None, dan re.search cocok dengan seluruh string, sampai menemukan kecocokan.
contoh:
#!/usr/bin/python import re line = "Cats are smarter than dogs"; matchObj = re.match( r'dogs', line, re.M|re.I) if matchObj: print "match --> matchObj.group() : ", matchObj.group() else: print "No match!!" matchObj = re.search( r'dogs', line, re.M|re.I) if matchObj: print "search --> matchObj.group() : ", matchObj.group() else: print "No match!!"Contoh hasil di atas adalah sebagai berikut:
No match!! search --> matchObj.group() : dogs
Mencari dan mengganti
Python ulang modul memberikan re.sub untuk pertandingan string pengganti.
sintaks:
re.sub(pattern, repl, string, max=0)
String kembali adalah string dengan pertandingan RE paling kiri tidak akan terulang untuk menggantikan. Jika pola ini tidak ditemukan, karakter akan dikembalikan tidak berubah.
count parameter opsional adalah jumlah maksimum kali pengganti pencocokan pola; count harus bilangan bulat non-negatif. Nilai default adalah 0 berarti mengganti semua kejadian.
contoh:
#!/usr/bin/python import re phone = "2004-959-559 # This is Phone Number" # Delete Python-style comments num = re.sub(r'#.*$', "", phone) print "Phone Num : ", num # Remove anything other than digits num = re.sub(r'\D', "", phone) print "Phone Num : ", numHasil dari contoh di atas adalah sebagai berikut:
Phone Num : 2004-959-559 Phone Num : 2004959559
Regex pengubah - bendera opsional
Kalimat biasa dapat berisi bendera pengubah opsional untuk mengontrol mode pertandingan. Pengubah ditetapkan sebagai bendera opsional. (|) Untuk menentukan beberapa bendera yang dapat bitwise OR melalui. Sebagai re.I | re.M diatur untuk saya dan M bendera:
pengubah | deskripsi |
---|---|
re.I | Jadi pencocokan yang tidak sensitif huruf |
re.L | Apakah identifikasi lokalisasi (sadar lokal) pencocokan |
re.M | Multi-garis pencocokan, mempengaruhi ^ dan $ |
re.S | So., Termasuk baris cocok dengan semua karakter |
re.U | Menurut mengatasi Unicode karakter set karakter. Bendera ini mempengaruhi \ w, \ W, \ b, \ B. |
re.X | Bendera ini dengan memberikan format yang lebih fleksibel sehingga Anda akan menulis kalimat biasa lebih mudah untuk memahami. |
Pola ekspresi reguler
Pola string menggunakan sintaks khusus untuk menunjukkan ekspresi reguler:
Surat dan angka sendiri. Pola ekspresi reguler dari huruf dan angka sesuai dengan string yang sama.
Sebagian besar huruf dan angka akan memiliki arti yang berbeda ketika didahului oleh garis miring terbalik.
Tanda baca lolos hanya ketika pertandingan itu sendiri, atau mereka mewakili arti khusus.
Backslash itu sendiri perlu menggunakan backslash melarikan diri.
Sejak ekspresi reguler biasanya mengandung backslash, sehingga Anda akan lebih baik menggunakan string asli untuk mewakili mereka. elemen skema (seperti r '/ t', setara dengan '// t') cocok dengan karakter khusus yang sesuai.
Tabel berikut mencantumkan unsur-unsur tertentu sintaks pola ekspresi reguler. Jika pola penggunaan Anda sambil memberikan opsional bendera argumen, makna unsur-unsur tertentu dari pola akan berubah.
mode | deskripsi |
---|---|
^ | Pertandingan awal string |
$ | Pertandingan akhir string. |
. | Cocok karakter apapun kecuali baris baru, ketika re.DOTALL bendera yang ditentukan, Anda dapat mencocokkan karakter apapun termasuk baris baru. |
[id.] | Ini digunakan untuk mewakili sekelompok karakter, tercantum secara terpisah: [amk] pertandingan 'a', 'm' atau 'k' |
[^ id.] | Tidak [] karakter: [^ abc] cocok selain karakter a, b, c. |
re * | 0 atau lebih dari ekspresi yang cocok. |
re + | Salah satu atau lebih dari ekspresi yang cocok. |
kembali? | Pertandingan 0 atau 1 dengan ekspresi reguler sebelumnya untuk menentukan segmen, non-serakah cara |
re {n} | |
re {n,} | Sama persis ekspresi n sebelumnya. |
re {n, m} | Pertandingan n ke m kali oleh ekspresi reguler sebelumnya untuk menentukan segmen, cara serakah |
a | b | Sebuah pertandingan atau b |
(Re) | G pertandingan ekspresi dalam kurung, juga mewakili kelompok |
(? Imx) | ekspresi reguler terdiri dari tiga bendera opsional: i, m, atau x. Ini hanya mempengaruhi daerah dalam tanda kurung. |
(? -imx) | ekspresi reguler Tutup i, m, atau x opsional bendera. Ini hanya mempengaruhi daerah dalam tanda kurung. |
(:? Re) | Serupa (id.), tetapi tidak mewakili kelompok |
(Imx :? Re) | Saya gunakan dalam kurung, m, atau x bendera opsional |
(-imx :? Re) | Jangan menggunakan i, m dalam kurung, atau x bendera opsional |
(? # id.) | Catatan. |
(? = Re) | Meneruskan yakin pembatas. Jika ekspresi reguler yang terkandung, diwakili di sini oleh id., berhasil cocok di lokasi saat ini, dan gagal sebaliknya. Namun, setelah ekspresi yang terkandung telah dicoba, mesin pencocokan tidak maju, sisa dari pola bahkan mencoba pembatas yang tepat. |
(?! Re) | Maju negasi pembatas. Dan pembatas tentu bertentangan; sukses ketika ekspresi yang terkandung tidak sesuai dengan posisi saat ini dalam string |
(?> Re) | pencocokan pola mandiri, menghilangkan backtracking. |
\ W | Pertandingan alfanumerik dan garis bawah |
\ W | Mencocokkan non-alfanumerik dan garis bawah |
\ S | Cocok dengan karakter spasi, setara dengan [\ t \ n \ r \ f]. |
\ S | Cocok dengan karakter non-kosong |
\ D | Cocok dengan nomor yang sama dengan [0-9]. |
\ D | Cocok setiap non-numerik |
\ A | Cocok dengan awal string |
\ Z | Pertandingan tali akhir, jika ada baris baru, sebelum akhir string untuk mencocokkan baris baru. c |
\ Z | Pertandingan tali end |
\ G | Pertandingan selesai posisi terakhir. |
\ B | Cocok batas kata, yaitu, mengacu pada lokasi dan ruang antara kata-kata. Misalnya, 'er \ b' bisa cocok dengan "tidak pernah" di 'er', tapi tidak bisa cocok dengan "kata kerja" di 'er'. |
\ B | Mencocokkan batas non-kata. 'Er \ B' bisa cocok dengan "kata kerja" di 'er', tapi tidak bisa cocok "tidak pernah" di 'er'. |
\ N, \ t, dan sejenisnya. | Cocok baris baru. Cocok dengan karakter tab. tunggu |
\ 1 id. \ 9 | Pencocokan sub-ekspresi n-th paket. |
\ 10 | Mencocokkan pertama n paket subexpression jika setelah pertandingan. Jika tidak, ekspresi mengacu pada kode karakter oktal. |
Contoh ekspresi reguler
pertandingan karakter
contoh | deskripsi |
---|---|
ular sanca | Pencocokan "python". |
karakter Kelas
contoh | deskripsi |
---|---|
[Pp] ython | Pencocokan "Python" atau "python" |
menggosok [kamu] | Pertandingan "ruby" atau "rube" |
[Aeiou] | Salah satu dari surat-surat dalam kurung yang cocok |
[0-9] | Cocok digit apapun. Mirip dengan [0123456789] |
[Az] | Cocok dengan huruf kecil |
[AZ] | Cocok huruf besar setiap |
[A-zA-Z0-9] | Cocok setiap huruf dan angka |
[^ Aeiou] | Selain semua karakter selain huruf aeiou |
[^ 0-9] | Pencocokan karakter kecuali angka |
Kelas karakter khusus
contoh | deskripsi |
---|---|
. | Cocok dengan satu karakter apapun kecuali "\ n" adalah. Untuk mencocokkan termasuk '\ n', termasuk karakter apapun, seperti penggunaan '[. \ N]' mode. |
\ D | Cocok dengan karakter digit. Setara dengan [0-9]. |
\ D | Cocok dengan karakter non-numerik. Hal ini setara dengan [^ 0-9]. |
\ S | Cocok karakter spasi, termasuk spasi, tab, halaman istirahat, dan sebagainya. Adalah setara dengan [\ f \ n \ r \ t \ v]. |
\ S | Cocok karakter non-spasi. Adalah setara dengan [^ \ f \ n \ r \ t \ v]. |
\ W | Ditemukan kata karakter termasuk garis bawah. Hal ini setara dengan '[A-Za-Z0-9_]'. |
\ W | Cocok dengan karakter non-kata. Hal ini setara dengan '[^ A-Za-Z0-9_]'. |