Bagaimana untuk Mengeluarkan Nilai Titik Terapung Ketepatan Berganda daripada Rentetan dengan Regex?

DDD
Lepaskan: 2024-10-21 12:13:33
asal
890 orang telah melayarinya

How to Extract Double Precision Floating-Point Values from Strings with Regex?

Mengekstrak Nilai Titik Terapung Ketepatan Berganda daripada Rentetan dengan Ungkapan Biasa

Dalam artikel ini, kami akan meneroka soalan yang sering ditemui dalam pengaturcaraan: bagaimana untuk mengekstrak terapung berketepatan ganda -titik nombor daripada rentetan teks menggunakan modul Python semula untuk ungkapan biasa.

Corak Regex untuk Ketepatan Berganda

Untuk memadankan nilai titik terapung berketepatan berganda, kita boleh menggunakan ungkapan biasa yang menangkap tanda pilihan, bahagian kamiran atau pecahan, dan eksponen pilihan. Corak berikut ialah contoh daripada dokumentasi Perl:

<code class="python">re_float = re.compile("""(?x)
   ^
      [+-]?\ *      # optional sign and space
      (             # integer or fractional mantissa:
          \d+       # start out with digits...
          (
              \.\d* # mantissa of the form a.b or a.
          )?        # ? for integers of the form a
         |\.\d+     # mantissa of the form .b
      )
      ([eE][+-]?\d+)?  # optional exponent
   $""")</code>
Salin selepas log masuk

Pemadanan dan Pengekstrakan

Untuk memadankan nilai ketepatan berganda dengan corak ini, kita boleh menggunakan kaedah padanan pada ungkapan biasa yang disusun objek:

<code class="python">m = re_float.match("4.5")
print(m.group(0))  # prints 4.5</code>
Salin selepas log masuk

Ini mengekstrak bahagian rentetan yang sepadan dengan corak, dalam kes ini, keseluruhan rentetan.

Mengekstrak Berbilang Nilai

Jika kita mempunyai rentetan yang lebih besar yang mengandungi berbilang nilai ketepatan berganda, kita boleh menggunakan kaedah findall untuk mengekstrak semua nilai yang sepadan:

<code class="python">s = """4.5 abc -4.5 abc - 4.5 abc + .1e10 abc . abc 1.01e-2 abc 
       1.01e-.2 abc 123 abc .123"""
print(re.findall(r"[+-]? *(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][+-]?\d+)?", s))
# prints ['4.5', '-4.5', '- 4.5', '+ .1e10', ' 1.01e-2',
#     '       1.01', '-.2', ' 123', ' .123']</code>
Salin selepas log masuk

Corak ini sepadan dengan mana-mana nilai titik terapung ketepatan berganda, tanpa mengira ruang atau teks sekeliling dan mengekstraknya sebagai senarai rentetan.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Nilai Titik Terapung Ketepatan Berganda daripada Rentetan dengan Regex?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber: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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!