Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimana untuk Memadankan Blok Multiline dalam Python Menggunakan Ungkapan Biasa?
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 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!