Rumah > pembangunan bahagian belakang > Tutorial Python > Mengapa `re.findall` Gagal Mencari Nombor dalam Rentetan Apabila `re.search` Berjaya?

Mengapa `re.findall` Gagal Mencari Nombor dalam Rentetan Apabila `re.search` Berjaya?

Mary-Kate Olsen
Lepaskan: 2024-12-29 13:21:11
asal
879 orang telah melayarinya

Why Does `re.findall` Fail to Find Numbers in a String When `re.search` Succeeds?

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]+'
Salin selepas log masuk

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:

  1. Menangkap Kumpulan: re.findall mengekstrak dan mengembalikan hanya teks yang ditangkap apabila corak regex mengandungi kumpulan penangkapan.
  2. Pemadanan Backslash Literal: \ dalam corak cuba memadankan literal , bukannya yang dimaksudkan . watak.

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+'
Salin selepas log masuk

Corak ini akan sepadan dengan:

  • -?d*: Tanda tolak pilihan dan sifar atau lebih digit
  • .?: Pemisah perpuluhan pilihan
  • d : Satu atau lebih digit

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']
Salin selepas log masuk

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!

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