Rumah > Artikel > pembangunan bahagian belakang > Mengapakah `re.sub(r\'(foo)\', r\'\\1123\', \'foobar\')` tidak menghasilkan \"foo123bar\" dalam ungkapan biasa Python?
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
re.sub(r'(foo)', r'\g<1>123', 'foobar')
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
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!