Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `re.findall` Mengembalikan Senarai Kosong Apabila Memadankan Nombor dalam 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:
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!