Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `re.findall` Mengembalikan Senarai Kosong Apabila Memadankan Nombor dalam Python?

Mengapakah `re.findall` Mengembalikan Senarai Kosong Apabila Memadankan Nombor dalam Python?

Barbara Streisand
Barbara Streisandasal
2024-12-27 01:20:10785semak imbas

Why Does `re.findall` Return an Empty List When Matching Numbers in Python?

re.findall Berkelakuan Tidak Konsisten

Apabila cuba menggunakan re.findall untuk memadankan nilai berangka dalam rentetan, sesetengah pengguna telah melihat tingkah laku yang tidak dijangka . Semasa re.search mengambil padanan dengan tepat, re.findall mengembalikan senarai kosong. Perbezaan yang ketara ini boleh dikaitkan dengan faktor berikut:

Kumpulan Tangkap dan re.findall

Satu perkara penting yang perlu diingat ialah re.findall memperoleh teks yang ditangkap jika corak regex mengandungi kumpulan penangkapan. Seperti yang ditakrifkan dalam rujukan, jika corak termasuk menangkap kumpulan, re.findall mengembalikan senarai kumpulan, yang berpotensi dalam bentuk tupel untuk corak dengan berbilang kumpulan. Terutamanya, padanan kosong pun disertakan dalam output, melainkan ia serta-merta mendahului perlawanan lain.

Kumpulan Tidak Menangkap dan Melarikan Diri Secara Hakiki

Dalam contoh yang disediakan, spesifik isu berpunca daripada penggunaan \ dalam r'' literal rentetan. Pembinaan ini cuba memadankan literal , dan bukannya maksud yang dimaksudkan untuk memadankan mana-mana aksara tunggal (selain daripada baris baharu). Untuk memadankan nilai berangka dengan betul, corak hendaklah diubah suai kepada:

-?\d*\.?\d+

Corak ini termasuk kumpulan tangkapan berikut:

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

Demonstrasi

Berikut ialah demonstrasi IDEONE bagi corak yang disemak:

import re
s = r'abc123d, hello 3.1415926, this is my book'
pattern = r'-?\d*\.?\d+'
L = re.findall(pattern, s)
print(L)

Corak ini mengambil semula senarai padanan berangka yang dijangkakan dengan betul: ['123', '3.1415926'].

Dengan mempertimbangkan sifat menangkap kumpulan dan penggunaan yang sesuai untuk melarikan diri secara literal, pembangun boleh memastikan bahawa re.findall berfungsi seperti yang dimaksudkan dalam skrip mereka.

Atas ialah kandungan terperinci Mengapakah `re.findall` Mengembalikan Senarai Kosong Apabila Memadankan Nombor dalam 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