Gelagat Tidak Konsisten re.sub dengan Bendera
Fungsi re.sub Python direka untuk menggantikan semua kejadian corak dalam rentetan. Walau bagaimanapun, pengguna mungkin menghadapi tingkah laku yang tidak dijangka apabila menentukan bendera sebagai argumen.
Dokumentasi Python menyatakan bahawa bendera re.MULTILINE membenarkan aksara '^' dalam corak dipadankan pada permulaan setiap baris. Walaupun spesifikasi ini, pengguna telah melaporkan bahawa re.sub kadangkala gagal menggantikan semua kemunculan corak apabila bendera re.MULTILINE digunakan.
Untuk memahami sebab di sebalik tingkah laku ini, adalah penting untuk mengkaji definisi re.sub:
re.sub(pattern, repl, string[, count, flags])
Argumen keempat ialah kiraan, yang menentukan bilangan maksimum penggantian untuk dilakukan. Apabila pengguna menentukan bendera (cth., re.MULTILINE) dalam kedudukan hujah ini, ia ditafsirkan sebagai kiraan dan bukannya bendera.
Untuk mengatasi isu ini, terdapat dua pendekatan:
Menggunakan Argumen Dinamakan:
Dengan menyatakan secara eksplisit bendera sebagai argumen bernama, anda boleh mengelakkan kekeliruan. Contohnya:
re.sub('^//', '', s, flags=re.MULTILINE)
Menyusun Regex Pertama:
Sebagai alternatif, anda boleh menyusun regex menggunakan fungsi re.compile sebelum memanggil re.sub:
re.sub(re.compile('^//', re.MULTILINE), '', s)
Atas ialah kandungan terperinci Mengapa re.sub Berlaku Salah Apabila Menggunakan Bendera dengan Regex Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!