Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah `re.findall()` Mengendalikan Padanan Bertindih dalam Ungkapan Biasa?

Bagaimanakah `re.findall()` Mengendalikan Padanan Bertindih dalam Ungkapan Biasa?

Susan Sarandon
Susan Sarandonasal
2024-12-11 14:06:12330semak imbas

How Does `re.findall()` Handle Overlapping Matches in Regular Expressions?

Memahami Padanan Bertindih Regex

Apabila menggunakan re.findall() untuk memadankan ungkapan biasa, memahami cara padanan bertindih dikendalikan adalah penting. Secara lalai, re.findall() mengembalikan padanan tidak bertindih.

Kajian Kes: hello dan ww

Pertimbangkan corak berikut:

>>> match = re.findall(r'\w\w', 'hello')
>>> print match
['he', 'll']

Seperti yang dijangkakan, corak ini sepadan dengan jujukan dua aksara. Walau bagaimanapun, ia tidak sepadan dengan 'el' atau 'lo' kerana masing-masing bertindih dengan 'dia' dan 'll'.

Perlawanan Bertindih dengan Penegasan Pandang Ke Hadapan

Untuk mencari padanan bertindih, penegasan pandang ke hadapan boleh digunakan. Penegasan pandang ke hadapan, dilambangkan dengan (?=...), mengesahkan sama ada corak tertentu wujud seterusnya tanpa menggunakan rentetan input.

Menggunakan konsep ini, ungkapan berikut berjaya menangkap padanan bertindih dan tidak bertindih:

>>> re.findall(r'(?=(\w\w))', 'hello')
['he', 'el', 'll', 'lo']

Coraknya kini berbunyi: "cari mana-mana lokasi di mana perkataan dua aksara mengikut." Ini memastikan semua jujukan padanan yang mungkin, termasuk urutan bertindih dan tidak bertindih, ditangkap.

Atas ialah kandungan terperinci Bagaimanakah `re.findall()` Mengendalikan Padanan Bertindih dalam Ungkapan Biasa?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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