Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapakah `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` tidak menghasilkan \'foo123bar\' dalam ungkapan biasa Python?

Mengapakah `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` tidak menghasilkan \'foo123bar\' dalam ungkapan biasa Python?

DDD
Lepaskan: 2024-11-03 22:19:30
asal
841 orang telah melayarinya

Why does `re.sub(r'(foo)', r'23', 'foobar')` not produce

Kekeliruan Ungkapan Biasa Python: Penggantian dengan Rujukan Balik Bernombor Kumpulan

Apabila cuba menggantikan "foobar" dengan "foo123bar" menggunakan ungkapan biasa, anda mungkin menghadapi keputusan yang tidak dijangka. Penggantian seperti re.sub(r'(foo)', r'1123', 'foobar') gagal menghasilkan output yang diingini dan sebaliknya mengembalikan "J3bar."

Untuk memahami isu ini, adalah penting untuk perhatikan perbezaan antara rujukan belakang nombor kumpulan dan digit tersurat. Dalam kes ini, 1123 menganggap "1123" sebagai rentetan literal, bukan sebagai rujukan kepada kumpulan tangkapan pertama. Akibatnya, penggantian tidak berfungsi seperti yang dimaksudkan.

Untuk mencapai penggantian yang betul, anda harus menggunakan sintaks g, dengan "nombor" merujuk kepada nombor kumpulan. Contohnya:

re.sub(r'(foo)', r'\g<1>123', 'foobar')
Salin selepas log masuk

Dalam kes ini, g<1> menangkap subrentetan yang dipadankan oleh kumpulan pertama, iaitu rentetan "foo" daripada input. Dengan menggunakan rujukan belakang nombor kumpulan yang sesuai, penggantian dilakukan dengan betul, menghasilkan output "foo123bar."

Tingkah laku ini dijelaskan dalam dokumentasi Python, yang menerangkan penggunaan g untuk menentukan kumpulan bernama. Untuk nombor kumpulan, g boleh digunakan untuk merujuk kumpulan yang sepadan tanpa kesamaran, mengelakkan kemungkinan kekeliruan yang disebabkan oleh digit literal.

Atas ialah kandungan terperinci Mengapakah `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` tidak menghasilkan \'foo123bar\' dalam ungkapan biasa 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan