Bagaimana untuk Mengeluarkan Nilai Berganda daripada Rentetan Menggunakan Ungkapan Biasa?

Mary-Kate Olsen
Lepaskan: 2024-10-21 13:00:30
asal
251 orang telah melayarinya

How to Extract Double Values from Strings Using Regular Expressions?

Mengekstrak Nilai Berganda daripada Rentetan Menggunakan Regex

Masalah: Bagaimanakah anda boleh mengasingkan nilai berganda daripada rentetan menggunakan ungkapan biasa?

Pertimbangkan coretan kod berikut:

<code class="python">import re

pattr = re.compile(???)    
x = pattr.match("4.5")</code>
Salin selepas log masuk

Penyelesaian:

Untuk mengekstrak nilai berganda daripada rentetan menggunakan rentetan biasa ungkapan, anda boleh menggunakan ungkapan biasa berikut:

(?x)
   ^
      [+-]?\ *      # Optional sign and space
      (             # Integers or f.p. mantissas:
          \d+       # Integers of the form a...
          (
              \.\d* # Mantissa of the form a.b or a.
          )?        # ? takes care of integers of the form a
         |\.\d+     # Mantissa of the form .b
      )
      ([eE][+-]?\d+)?  # Optionally match an exponent
   $
Salin selepas log masuk

Ungkapan biasa ini sepadan dengan rentetan yang bermula dengan tanda dan ruang pilihan, diikuti dengan integer atau mantissa titik terapung dan eksponen pilihan.

Berikut ialah contoh:

<code class="python">import re

re_float = re.compile("""(?x)
   ^
      [+-]?\ *      # Optional sign and space
      (             # Integers or f.p. mantissas:
          \d+       # Integers of the form a...
          (
              \.\d* # Mantissa of the form a.b or a.
          )?        # ? takes care of integers of the form a
         |\.\d+     # Mantissa of the form .b
      )
      ([eE][+-]?\d+)?  # Optionally match an exponent
   $""")

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

Mengekstrak Berbilang Nombor daripada Rentetan:

Jika anda perlu mengekstrak berbilang nombor daripada rentetan yang lebih besar, anda boleh gunakan fungsi findall():

<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))
# -> ['4.5', '-4.5', '- 4.5', '+ .1e10', ' 1.01e-2',
#     '       1.01', '-.2', ' 123', ' .123']</code>
Salin selepas log masuk

Ungkapan biasa ini akan sepadan dengan mana-mana nombor yang terdiri daripada tanda pilihan, ruang, gabungan integer dan bahagian pecahan pilihan dan tatatanda eksponen pilihan.

Atas ialah kandungan terperinci Bagaimana untuk Mengeluarkan Nilai Berganda daripada Rentetan Menggunakan Ungkapan Biasa?. 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
Artikel terbaru oleh pengarang
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!