Latest web development tutorials

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.w3big.com').span())  # 在起始位置匹配
print(re.match('com', 'www.w3big.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.w3big.com').span())  # 在起始位置匹配
print(re.search('com', 'www.w3big.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 : ", num
Hasil 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.
[...] Ini digunakan untuk mewakili sekelompok karakter, tercantum secara terpisah: [amk] pertandingan 'a', 'm' atau 'k'
[^ ...] 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 (...), 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
(? # ...) Catatan.
(? = Re) Meneruskan yakin pembatas. Jika ekspresi reguler yang terkandung, diwakili di sini oleh ..., 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 ... \ 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_]'.