Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memadankan Blok Multiline dalam Python Menggunakan Ungkapan Biasa?

Bagaimana untuk Memadankan Blok Multiline dalam Python Menggunakan Ungkapan Biasa?

Susan Sarandon
Susan Sarandonasal
2024-10-24 22:16:02734semak imbas

How to Match Multiline Blocks in Python Using Regular Expressions?

Memadankan Blok Berbilang Baris Menggunakan Ungkapan Biasa

Anda mungkin menghadapi kesukaran apabila memadankan teks yang merentangi berbilang baris menggunakan ungkapan biasa Python. Pertimbangkan contoh teks berikut:

some Varying TEXT

DSJFKDAFJKDAFJDSAKFJADSFLKDLAFKDSAF
[more of the above, ending with a newline]
[yep, there is a variable number of lines here]

(repeat the above a few hundred times).

Matlamatnya adalah untuk menangkap dua komponen:

  • "beberapa TEKS Berubah-ubah"
  • Semua baris huruf besar yang terletak dua baris di bawah ia (tidak termasuk mana-mana aksara baris baharu)

Beberapa pendekatan telah dicuba tidak berjaya:

<code class="python">re.compile(r"^>(\w+)$$(\n[.$]+)^$", re.MULTILINE) # Capture both parts
re.compile(r"([^>][\w\s]+)$", re.MULTILINE|re.DOTALL) # Just textlines</code>

Untuk menangani isu ini, gunakan ungkapan biasa berikut:

<code class="python">re.compile(r"^(.+)\n((?:\n.+)+)", re.MULTILINE)</code>

Perlu diingat bahawa sauh "^" dan "$" tidak sepadan dengan suapan talian. Oleh itu, dalam mod berbilang baris, "^" mengikuti baris baharu dan "$" mendahului baris baharu.

Selain itu, berhati-hati dengan pelbagai format baris baharu. Untuk teks yang mungkin mengandungi suapan talian, pemulangan pengangkutan atau kedua-duanya, gunakan regex yang lebih inklusif ini:

<code class="python">re.compile(r"^(.+)(?:\n|\r\n?)((?:(?:\n|\r\n?).+)+)", re.MULTILINE)</code>

Pengubah suai DOTALL tidak diperlukan di sini kerana titik itu sudah mengecualikan baris baharu.

Atas ialah kandungan terperinci Bagaimana untuk Memadankan Blok Multiline dalam Python 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