Rumah > Artikel > pembangunan bahagian belakang > Mengapa Tidak re.sub dengan re.MULTILINE Menggantikan Semua Kejadian?
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!