Mengapa re.sub Berlaku Salah Apabila Menggunakan Bendera dengan Regex Python?

Linda Hamilton
Lepaskan: 2024-11-06 03:37:02
asal
690 orang telah melayarinya

Why Does re.sub Misbehave When Using Flags with Python's Regex?

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])
Salin selepas log masuk

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)
Salin selepas log masuk

Menyusun Regex Pertama:

Sebagai alternatif, anda boleh menyusun regex menggunakan fungsi re.compile sebelum memanggil re.sub:

re.sub(re.compile('^//', re.MULTILINE), '', s)
Salin selepas log masuk

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!

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