Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `re.findall` Mengembalikan Senarai Kosong Sementara `re.search` Berfungsi dengan betul dengan Corak dan Rentetan yang Sama dalam Python 3.4.3?

Mengapakah `re.findall` Mengembalikan Senarai Kosong Sementara `re.search` Berfungsi dengan betul dengan Corak dan Rentetan yang Sama dalam Python 3.4.3?

Patricia Arquette
Patricia Arquetteasal
2024-12-22 20:57:10262semak imbas

Why Does `re.findall` Return an Empty List While `re.search` Works Correctly with the Same Pattern and String in Python 3.4.3?

re.findall Berkelakuan Anomali

Dilema:

Dalam skrip Python menggunakan Python 3.4 .3, kaedah re.search memberikan hasil yang dijangkakan apabila digunakan pada rentetan sumber tertentu menggunakan corak tertentu. Walau bagaimanapun, re.findall secara tidak jelas mengembalikan senarai kosong untuk corak dan rentetan sumber yang sama.

Penerokaan:

Anehnya, kaedah re.findall berkelakuan di luar jangkaan walaupun kelihatan memenuhi keperluan untuk mengekstrak padanan daripada rentetan berdasarkan corak.

Penyelesaian:

Setelah diperiksa dengan teliti, menjadi jelas bahawa dua faktor menyumbang kepada tingkah laku pelik ini:

  • Komposisi Corak:
    Corak yang disediakan mengandungi ungkapan yang dipertikaikan, r'.', yang bertujuan untuk memadankan watak melarikan diri () diikuti oleh mana-mana watak bukan baris baharu. Walau bagaimanapun, dalam konteks rentetan r'' literal, ungkapan ini cuba memadankan literal , mengakibatkan tingkah laku yang salah.
  • Findall Gelagat:
    The re. kaedah findall menjangkakan corak mengandungi kumpulan penangkapan. Jika tiada kumpulan penangkap hadir, ia mengembalikan rentetan kosong. Corak asal kekurangan menangkap kumpulan, menyebabkan ia tidak dapat menangkap padanan yang diingini.

Corak Dibetulkan:

Untuk mengurangkan isu ini dan berjaya mengeluarkan padanan, mengikut corak yang diperbetulkan sepatutnya bekerja:

-?\d*\.?\d+

Penjelasan:

  • -?: Tanda tolak pilihan
  • d *: Pilihan digit
  • .?: Pemisah perpuluhan pilihan
  • d : Satu atau lebih digit

Demonstrasi :

Menggunakan corak yang diubah suai, yang Kaedah re.findall kini dengan tepat mendapatkan semula senarai perlawanan yang dijangkakan:

['123', '3.1415926']

Atas ialah kandungan terperinci Mengapakah `re.findall` Mengembalikan Senarai Kosong Sementara `re.search` Berfungsi dengan betul dengan Corak dan Rentetan yang Sama dalam Python 3.4.3?. 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