re.findall Berkelakuan Tidak Dapat Diramalkan
Dengan rentetan dan corak asal seperti yang ditakrifkan di bawah:
s = r'abc123d, hello 3.1415926, this is my book' pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
re. carian mencari padanan dengan tepat, manakala re.findall menghasilkan senarai kosong. Tingkah laku ini, yang bercanggah dengan output jangkaan ['123', '3.1415926'], menimbulkan persoalan mengapa re.findall tidak menghasilkan keputusan ini.
Memahami Isu
Dua pertimbangan utama sedang dimainkan di sini:
Pengubahsuaian Regex
Untuk menangani perkara ini, kami boleh mengubah suai corak untuk mengalih keluar kumpulan penangkapan berlebihan dan memadankan nombor dengan betul:
pattern = r'-?\d*\.?\d+'
Corak ini akan sepadan dengan:
Keputusan
Menggunakan corak yang diubah suai ini, re.findall akan menghasilkan output yang dijangkakan:
import re L = re.findall(pattern, s) print(L) # Output: ['123', '3.1415926']
Atas ialah kandungan terperinci Mengapa `re.findall` Gagal Mencari Nombor dalam Rentetan Apabila `re.search` Berjaya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!