Bendera untuk Rentetan Ungkapan Biasa dalam Python
Untuk menetapkan bendera sebagai salah satu parameter pilihan untuk kaedah yang bekerja dengan ungkapan biasa, sintaks berikut digunakan:
flags=re.nama_bendera
Bendera utama untuk bekerja dengan ungkapan biasa
| Bendera | Tujuan |
|---|---|
re.IGNORECASE |
Mengabaikan kes huruf penulisan aksara. |
re.DOTALL |
Titik menandakan sebarang aksara, termasuk dan pemindahan baris. |
re.I |
Menjadikan carian tidak sensitif kepada kes. |
re.L |
Mencari perkataan mengikut bahasa semasa.
Tafsiran ini melibatkan kumpulan abjad
(\w dan \W), dan juga
tingkah laku sempadan perkataan (\b dan
\B).
|
re.M |
Aksara $ melakukan carian di hujung
sebarang baris teks (bukan hanya hujung teks)
dan aksara ^ melakukan carian di awal
sebarang baris teks (bukan hanya di awal
teks).
|
re.S |
Mengubah nilai titik (.) kepada
padanan dengan sebarang aksara, termasuk baris
baharu.
|
re.U |
Menafsirkan huruf mengikut set aksara Unicode.
Bendera ini mempengaruhi tingkah laku
\w, \W, \b,
\B. Dalam Python 3+ bendera ini
ditetapkan secara lalai.
|
re.X |
Membenarkan sintaks ungkapan biasa berbilang
baris. Ia mengabaikan ruang kosong di dalam
pola (kecuali ruang kosong di dalam set
[] atau apabila dilindungi oleh
garis miring belakang) dan mengendalikan
'#' yang tidak dilindungi sebagai
komen.
|
Contoh
Dengan menggunakan bendera re.IGNORECASE, anda boleh
mengabaikan kes huruf aksara. Mari kita
lihat bagaimana ia dilakukan. Dalam contoh ini,
ungkapan biasa akan menemui hanya huruf kecil:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Keputusan pelaksanaan kod:
'! ! CCC DDD'
Contoh
Dan sekarang tambahkan dalam parameter keempat
kaedah bendera re.IGNORECASE dan ungkapan biasa
akan mula mencari aksara dalam semua kes:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Keputusan pelaksanaan kod:
'! ! ! !'
Contoh
Mari cari dengan ungkapan biasa semua pemindahan baris:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Keputusan kod yang dilaksanakan:
'aaa!bbb'
Contoh
Tetapi, jika perlu untuk menggantikan kesemua aksara, maka dengan meletakkan titik dalam ungkapan biasa, pemindahan baris tidak akan diambil:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Keputusan kod yang dilaksanakan:
'!!!
!!!'
Contoh
Untuk membetulkan ralat ini, anda patut
menggunakan bendera re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Keputusan kod yang dilaksanakan:
'!!!!!!!'
Contoh
Dalam parameter, beberapa bendera boleh
dihantar, dengan meletakkan operator +
antara mereka. Mari mula-mula gantikan huruf 'a'
di hujung baris:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
, '!', txt)
print(res)
Keputusan kod yang dilaksanakan:
'''
aaa
AAA
!
'''
Contoh
Sekarang tetapkan bendera re.M:
res = re.sub('aaa
, '!', txt, flags=re.M)
print(res)
Keputusan kod yang dilaksanakan:
'''
!
AAA
!
'''
Contoh
Sekarang mari gunakan juga bendera untuk mengabaikan kes:
res = re.sub('aaa
, '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Keputusan kod yang dilaksanakan:
'''
!
!
!
'''