Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Mengeluarkan Nilai Titik Terapung Ketepatan Berganda daripada Rentetan dengan Regex?

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

DDD
DDDasal
2024-10-21 12:13:33891semak imbas

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>

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>

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>

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!

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