Masalah:
Apabila menggunakan re.findall untuk memadankan corak ungkapan biasa, mengapa ia tidak mendapatkan semula semua perlawanan bertindih? Sebagai contoh, dalam rentetan "hello," mengapakah regex r'ww' hanya sepadan dengan "dia" dan "ll" tetapi bukan "el" dan "lo"?
Jawapan:
Secara lalai, re.findall tidak menghasilkan padanan bertindih. Untuk mencapai matlamat ini, gunakan penegasan pandang ke hadapan, ciri regex yang berkuasa.
Penyelesaian:
# Using a lookahead assertion matches = re.findall(r'(?=(\w\w))', 'hello') # Output: ['he', 'el', 'll', 'lo']
Konstruk (?=...) dalam regex ialah dakwaan memandang ke hadapan. Ia sepadan jika corak yang ditentukan muncul serta-merta selepas kedudukan semasa, tetapi ia tidak menggunakan sebarang aksara daripada rentetan. Dalam kes ini, ia mengenal pasti semua jujukan dua aksara ("ww") dalam "hello" tanpa menggunakan sebarang aksara.
Penjelasan:
Atas ialah kandungan terperinci Mengapa `re.findall` Tidak Mengembalikan Padanan Regex Bertindih, dan Bagaimanakah Penegasan Pandangan Ke Hadapan Boleh Menyelesaikan Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!