Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa re.sub Berkelakuan Tidak Dijangka dengan Bendera re.MULTILINE?

Mengapa re.sub Berkelakuan Tidak Dijangka dengan Bendera re.MULTILINE?

Patricia Arquette
Lepaskan: 2024-11-05 14:51:02
asal
433 orang telah melayarinya

Why is re.sub Behaving Unexpectedly with the re.MULTILINE Flag?

Penggantian Tidak Dijangka dengan re.sub dan Flag

Dokumentasi Python menyatakan bahawa bendera re.MULTILINE membenarkan aksara karet (^) untuk perlawanan pada permulaan setiap baris. Walau bagaimanapun, apabila menggunakan bendera ini dengan re.sub, tingkah laku yang tidak dijangka boleh berlaku.

Pertimbangkan contoh ini:

<code class="python">import re
s = """// The quick brown fox.
// Jumped over the lazy dog."""
result = re.sub('^//', '', s, re.MULTILINE)
print(result)</code>
Salin selepas log masuk

Hasil yang dijangkakan adalah untuk semua baris bermula dengan "//" menjadi digantikan dengan rentetan kosong, hanya tinggal:

The quick brown fox.
Jumped over the lazy dog.
Salin selepas log masuk

Walau bagaimanapun, keputusan sebenar ialah:

 The quick brown fox.
// Jumped over the lazy dog.
Salin selepas log masuk

Sebab Isu

Isu timbul kerana fungsi re.sub menerima hujah keempat untuk bilangan maksimum penggantian yang perlu dibuat. Dalam contoh, re.MULTILINE telah tersilap digunakan sebagai kiraan dan bukannya sebagai bendera.

Penyelesaian

Untuk membetulkan tingkah laku ini, gunakan argumen bernama untuk menentukan bendera:

<code class="python">result = re.sub('^//', '', s, flags=re.MULTILINE)</code>
Salin selepas log masuk

Sebagai alternatif, anda boleh menyusun ungkapan biasa dengan bendera yang diingini sebelum menggunakannya dengan re.sub:

<code class="python">regex = re.compile('^//', re.MULTILINE)
result = re.sub(regex, '', s)</code>
Salin selepas log masuk

Dengan menentukan bendera re.MULTILINE dengan betul, anda boleh memastikan bahawa semua kemunculan corak ^// diganti, tanpa mengira kedudukannya dalam rentetan.

Atas ialah kandungan terperinci Mengapa re.sub Berkelakuan Tidak Dijangka dengan Bendera re.MULTILINE?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan