Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Cari Padanan Bertindih Menggunakan `re.findall()` Python?

Bagaimanakah Saya Boleh Cari Padanan Bertindih Menggunakan `re.findall()` Python?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-12-06 16:40:13647semak imbas

How Can I Find Overlapping Matches Using Python's `re.findall()`?

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 :

  • (?:...) ialah kumpulan yang tidak menangkap, yang bermaksud kandungan kumpulan itu tidak dikembalikan.
  • ww sepadan dengan dua aksara perkataan berturut-turut.
  • (?=...) ialah penegasan pandang ke hadapan, yang memastikan rentetan mengandungi ww di lokasi semasa tetapi tidak memakannya.

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!

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