Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Cari Padanan Bertindih Menggunakan `re.findall()` Python?
Memahami Padanan Bertindih dalam Regex
Secara lalai, kaedah findall() dalam modul semula Python tidak menangkap padanan bertindih dalam rentetan . Tingkah laku ini boleh mengelirukan, terutamanya apabila padanan terdiri daripada aksara berturut-turut.
Pertimbangkan kod berikut:
match = re.findall(r'\w\w', 'hello') print(match)
Output:
['he', 'll']
Corak ini sepadan dengan dua berturut-turut aksara perkataan (w). Seperti yang dijangka, dia dan ll dikembalikan. Walau bagaimanapun, el dan lo tidak ditangkap, walaupun terdapat dalam rentetan.
Mengatasi Perlawanan Bertindih
Untuk menangkap perlawanan bertindih, kita boleh menggunakan penegasan pandang ke hadapan (?= ...). Penegasan ini sepadan dengan corak tertentu tetapi tidak menggunakan sebarang aksara daripada rentetan. Sebaliknya, ia menyemak sama ada aksara berikut sepadan dengan penegasan.
Contohnya:
match1 = re.findall(r'(?=(\w\w))', 'hello') print(match1)
Output:
['he', 'el', 'll', 'lo']
Dalam kes ini, (?=(ww )) sepadan dengan mana-mana lokasi di mana dua aksara perkataan berturut-turut wujud tanpa benar-benar memakannya. Ini membolehkan findall() mengembalikan padanan bertindih dan tidak bertindih.
Penjelasan
Regeks /(?=(ww)) boleh dipecahkan seperti berikut :
Dengan menggunakan pendekatan ini, kami dapat mengesan semua padanan bertindih dengan berkesan dalam rentetan, walaupun apabila ia terdiri daripada berturut-turut watak.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Cari Padanan Bertindih Menggunakan `re.findall()` Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!