Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Mengekstrak Padanan Terpendek Antara Dua Rentetan dalam Python dengan Regex?

Bagaimana untuk Mengekstrak Padanan Terpendek Antara Dua Rentetan dalam Python dengan Regex?

DDD
DDDasal
2024-10-24 02:56:29398semak imbas

How to Extract Shortest Matches Between Two Strings in Python with Regex?

Mengekstrak Padanan Terpendek antara Dua Rentetan

Apabila berurusan dengan fail log yang besar, mengekstrak data tertentu antara dua rentetan boleh menjadi satu cabaran. Tugas menjadi lebih rumit apabila rentetan mula dan tamat berlaku beberapa kali sepanjang fail, dan output yang dikehendaki melibatkan padanan terpendek.

Regex Solution

Untuk menangani masalah ini , pendekatan ungkapan biasa boleh digunakan. Regex yang ideal akan menangkap teks antara rentetan mula dan akhir serta mengutamakan padanan terpendek.

Ungkapan biasa yang disediakan, (mula((?!mula).)*?akhir), memenuhi kriteria ini:

  • mula sepadan dengan rentetan permulaan dengan tepat.
  • ((?!mula).)*? sepadan dengan mana-mana watak kecuali mula berulang kali, menggunakan pengkuantiti malas *? untuk mengutamakan padanan terpendek.
  • akhir sepadan dengan rentetan penamat dengan tepat.

Pelaksanaan Menggunakan Python

Dalam Python, modul semula menawarkan fungsi yang diperlukan untuk menggunakan regex ini. Kod di bawah menunjukkan cara mengekstrak padanan terpendek menggunakan re.findall:

<code class="python">import re

text = "start spam\nstart rubbish\nstart wait for it...\n    profit!\nhere end\nstart garbage\nstart second match\nwin. end"

matches = re.findall('(start((?!start).)*?end)', text, re.S)

for match in matches:
    print(match)</code>

Output:

start wait for it...
    profit!
here end
start second match
win. end

Pertimbangan Tambahan untuk Fail Besar

Untuk fail yang sangat besar (mis., 2GB), kecekapan menjadi penting. Pengoptimuman berikut boleh digunakan:

  • Gunakan pendekatan berasaskan penimbal untuk mengelakkan membaca keseluruhan fail ke dalam ingatan.
  • Gunakan bendera enjin ekspresi biasa seperti re.MULTILINE untuk mengendalikan berbilang- input talian.

Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Padanan Terpendek Antara Dua Rentetan dalam Python 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