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

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

Patricia Arquette
Patricia Arquetteasal
2024-11-05 14:51:02372semak imbas

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>

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.

Walau bagaimanapun, keputusan sebenar ialah:

 The quick brown fox.
// Jumped over the lazy dog.

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>

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>

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!

Kenyataan:
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