Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `re.findall()` Mengembalikan Keputusan Kosong Apabila Memadankan Nombor Titik Terapung dalam Python?
re.findall Salah Laku: Keputusan Kosong yang Tidak Diingini
Dalam senario yang diberikan, manakala re.search() berjaya mengekstrak nilai berangka yang dimaksudkan " 123" daripada rentetan sumber, re.findall() secara tidak dijangka menghasilkan kosong keputusan.
Setelah disiasat, pelakunya dikenal pasti sebagai r'\.' bahagian corak regex. Dalam rentetan mentah (diawali dengan r), \ dilayan secara literal, memadankan aksara garisan belakang diikuti oleh mana-mana aksara kecuali baris baharu. Walau bagaimanapun, ini bukan gelagat yang dimaksudkan untuk menangkap nombor titik terapung.
Untuk membetulkan isu, corak yang diperbetulkan, -?d*.?d , mengikut prinsip ini:
Menggunakan corak yang disemak ini, re.findall() kini dengan betul mengenal pasti nilai berangka dalam rentetan sumber:
import re s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?\d*\.?\d+' L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
Ingat, untuk re.findall() mengembalikan nilai padanan tanpa menangkap kumpulan, corak mestilah bebas daripada mana-mana kumpulan menangkap atau kumpulan bukan menangkap (cth., (?:)), melainkan terdapat rujukan belakang dalam corak.
Atas ialah kandungan terperinci Mengapakah `re.findall()` Mengembalikan Keputusan Kosong Apabila Memadankan Nombor Titik Terapung dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!