Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa Adakah `re.findall()` Mengembalikan Senarai Kosong Apabila `re.search()` Menemui Padanan?

Mengapa Adakah `re.findall()` Mengembalikan Senarai Kosong Apabila `re.search()` Menemui Padanan?

Linda Hamilton
Lepaskan: 2024-12-19 09:23:09
asal
113 orang telah melayarinya

Why Does `re.findall()` Return an Empty List When `re.search()` Finds a Match?

re.findall Behavior

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.

Pernyataan Masalah

Pertimbangkan rentetan sumber berikut:

s = r'abc123d, hello 3.1415926, this is my book'
Salin selepas log masuk

Dan corak berikut:

pattern = r'-?[0-9]+(\.[0-9]*)?|-?\.[0-9]+'
Salin selepas log masuk

Dengan re.search, kami mendapat yang betul hasil:

m = re.search(pattern, s)
print(m)  # <_sre.SRE_Match object; span=(3, 6), match='123'>
Salin selepas log masuk

Walau bagaimanapun, re.findall mengembalikan senarai kosong:

L = re.findall(pattern, s)
print(L)  # []
Salin selepas log masuk

Memahami Isu

Terdapat dua aspek utama kepada pertimbangkan:

  1. Kumpulan Tangkapan Padanan Kosong: re.findall mengembalikan teks yang ditangkap daripada objek padanan, tetapi dalam corak ini, tiada kumpulan tangkapan. Akibatnya, ia mengembalikan rentetan kosong.
  2. Melepaskan Watak: \. dalam corak sepadan dengan dua aksara: dan mana-mana aksara kecuali baris baharu. Ini tidak bertujuan untuk memadankan nilai angka.

Penyelesaian

Untuk memadankan nilai angka dengan betul, gunakan corak berikut:

pattern = r'-?\d*\.?\d+'
Salin selepas log masuk

Corak ini sepadan dengan:

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

Dengan corak yang diperbetulkan ini, re.findall akan mengembalikan senarai yang dijangkakan:

['123', '3.1415926']
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan