Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Mengapa Tidak re.sub dengan re.MULTILINE Menggantikan Semua Kejadian?

Mengapa Tidak re.sub dengan re.MULTILINE Menggantikan Semua Kejadian?

Susan Sarandon
Susan Sarandonasal
2024-11-05 15:48:02852semak imbas

Why Doesn't re.sub with re.MULTILINE Replace All Occurrences?

Mengapa re.sub dengan re.MULTILINE Tidak Menggantikan Semua Kejadian

Fungsi re.sub Python, direka bentuk untuk melaksanakan penggantian teks berdasarkan pada ungkapan biasa, selalunya digunakan dengan bendera re.MULTILINE untuk mengembangkan kelakuan padanan aksara karet (^). Walau bagaimanapun, hasil yang tidak dijangka mungkin timbul apabila cuba menggantikan semua kemunculan corak menggunakan bendera ini.

Memahami Isu:

Dokumentasi rasmi untuk re.MULTILINE menyatakan bahawa ia sepatutnya membenarkan aksara karet dipadankan pada permulaan setiap baris dalam rentetan. Namun, dalam contoh berikut, tidak semua kejadian "// " dialih keluar seperti yang dijangkakan:

import re
s = """// The quick brown fox.
// Jumped over the lazy dog."""
result = re.sub('^//', '', s, re.MULTILINE)
print(result)

Penyelesaian:

Percanggahan terletak pada penggunaan daripada bendera re.MULTILINE. Secara lalai, hujah keempat re.sub ditafsirkan sebagai kiraan, bukan bendera. Untuk membetulkan isu ini, seseorang boleh menggunakan bendera bernama argumen secara eksplisit, seperti yang dilihat di bawah:

result = re.sub('^//', '', s, flags=re.MULTILINE)

Sebagai alternatif, ungkapan biasa boleh diprakompilkan dengan fungsi re.compile untuk menggabungkan bendera re.MULTILINE:

regex = re.compile('^//', re.MULTILINE)
result = re.sub(regex, '', s)

Dengan menyatakan hujah flags atau menyusun semula ungkapan biasa dengan bendera yang diingini, fungsi re.sub akan menggantikan semua kemunculan corak dengan betul, tanpa mengira pemisah baris.

Atas ialah kandungan terperinci Mengapa Tidak re.sub dengan re.MULTILINE Menggantikan Semua Kejadian?. 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