Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengeluarkan Nilai Berganda daripada Rentetan Menggunakan Ungkapan Biasa?

Bagaimana untuk Mengeluarkan Nilai Berganda daripada Rentetan Menggunakan Ungkapan Biasa?

Mary-Kate Olsen
Mary-Kate Olsenasal
2024-10-21 13:00:30334semak imbas

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>

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
   $

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>

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>

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!

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