Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapakah `re.findall()` Mengembalikan Keputusan Kosong Apabila Memadankan Nombor Titik Terapung dalam Python?

Mengapakah `re.findall()` Mengembalikan Keputusan Kosong Apabila Memadankan Nombor Titik Terapung dalam Python?

Susan Sarandon
Susan Sarandonasal
2024-12-22 07:07:10794semak imbas

Why Does `re.findall()` Return Empty Results When Matching Floating-Point Numbers in Python?

re.findall Salah Laku: Keputusan Kosong yang Tidak Diingini

Dalam senario yang diberikan, manakala re.search() berjaya mengekstrak nilai berangka yang dimaksudkan " 123" daripada rentetan sumber, re.findall() secara tidak dijangka menghasilkan kosong keputusan.

Setelah disiasat, pelakunya dikenal pasti sebagai r'\.' bahagian corak regex. Dalam rentetan mentah (diawali dengan r), \ dilayan secara literal, memadankan aksara garisan belakang diikuti oleh mana-mana aksara kecuali baris baharu. Walau bagaimanapun, ini bukan gelagat yang dimaksudkan untuk menangkap nombor titik terapung.

Untuk membetulkan isu, corak yang diperbetulkan, -?d*.?d , mengikut prinsip ini:

  • -? sepadan dengan tanda tolak pilihan.
  • d* sepadan dengan digit pilihan.
  • .? sepadan dengan pemisah perpuluhan pilihan.
  • d sepadan dengan satu atau lebih digit.

Menggunakan corak yang disemak ini, re.findall() kini dengan betul mengenal pasti nilai berangka dalam rentetan sumber:

import re

s = r'abc123d, hello 3.1415926, this is my book'
pattern = r'-?\d*\.?\d+'
L = re.findall(pattern, s)
print(L)  # Output: ['123', '3.1415926']

Ingat, untuk re.findall() mengembalikan nilai padanan tanpa menangkap kumpulan, corak mestilah bebas daripada mana-mana kumpulan menangkap atau kumpulan bukan menangkap (cth., (?:)), melainkan terdapat rujukan belakang dalam corak.

Atas ialah kandungan terperinci Mengapakah `re.findall()` Mengembalikan Keputusan Kosong Apabila Memadankan Nombor Titik Terapung dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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