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
Lepaskan: 2024-12-06 16:40:13
asal
678 orang telah melayarinya

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)
Salin selepas log masuk

Output:

['he', 'll']
Salin selepas log masuk

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)
Salin selepas log masuk

Output:

['he', 'el', 'll', 'lo']
Salin selepas log masuk

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 Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan