Bagaimana untuk Memadankan Blok Multiline dalam Python Menggunakan Ungkapan Biasa?

Susan Sarandon
Lepaskan: 2024-10-24 22:16:02
asal
742 orang telah melayarinya

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).
Salin selepas log masuk

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>
Salin selepas log masuk

Untuk menangani isu ini, gunakan ungkapan biasa berikut:

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

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>
Salin selepas log masuk

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!

sumber:php.cn
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!