Fungsi re.findall() boleh mengelirukan jika ia tidak mengembalikan hasil yang dijangkakan apabila memadankan rentetan. Mari kita terokai sebab di sebalik kelakuannya dalam kes tertentu.
Pertimbangkan rentetan sumber berikut:
s = r'abc123d, hello 3.1415926, this is my book'
Dan corak berikut:
pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
Dengan re.search, kami mendapat yang betul hasil:
m = re.search(pattern, s) print(m) # <_sre.SRE_Match object; span=(3, 6), match='123'>
Walau bagaimanapun, re.findall mengembalikan senarai kosong:
L = re.findall(pattern, s) print(L) # []
Terdapat dua aspek utama kepada pertimbangkan:
Untuk memadankan nilai angka dengan betul, gunakan corak berikut:
pattern = r'-?\d*\.?\d+'
Corak ini sepadan dengan:
Dengan corak yang diperbetulkan ini, re.findall akan mengembalikan senarai yang dijangkakan:
['123', '3.1415926']
Atas ialah kandungan terperinci Mengapa Adakah `re.findall()` Mengembalikan Senarai Kosong Apabila `re.search()` Menemui Padanan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!