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
832 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!

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