Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Menangkap Blok Teks Berbilang Baris dengan Ungkapan Biasa?

Bagaimana untuk Menangkap Blok Teks Berbilang Baris dengan Ungkapan Biasa?

Patricia Arquette
Patricia Arquetteasal
2024-10-25 06:05:02777semak imbas

How to Capture Multiline Text Blocks with Regular Expressions?

Ungkapan Biasa untuk Pemadanan Blok Teks Berbilang Baris

Teks pemadanan yang merentangi berbilang baris boleh memberikan cabaran dalam pembinaan ungkapan biasa. 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 ialah untuk menangkap dua komponen: bahagian "sesetengah TEKS Berubah-ubah" dan semua baris teks huruf besar seterusnya, tidak termasuk baris kosong.

Pendekatan Salah:

Beberapa pendekatan yang salah untuk menyelesaikan masalah ini termasuk:

  • Menggunakan ^ dan $ sauh untuk memadankan suapan talian. Dalam mod berbilang baris, ^ memadankan kedudukan mengikuti baris baharu dan $ sepadan dengan kedudukan sebelum baris baharu.
  • Menggunakan pengubah suai DOTALL untuk memadankan segala-galanya, yang tidak diperlukan kerana titik (.) sepadan dengan segala-galanya kecuali baris baharu.

Penyelesaian:

Ungkapan biasa berikut menangkap komponen yang dikehendaki dengan betul:

^(.+)\n((?:\n.+)+)

Berikut ialah pecahan komponennya:

  • ^ sepadan dengan permulaan baris.
  • (. ) menangkap bahagian "sesetengah TEKS Berubah-ubah" ke dalam kumpulan 1.
  • n sepadan dengan watak baris baharu.
  • ( (?:n. ) ) menangkap semua baris teks huruf besar berikutnya ke dalam kumpulan 2. Konstruk kumpulan tidak menangkap ?: menghalang baris ini daripada ditangkap sebagai kumpulan individu.
  • Pengendali ulangan memastikan bahawa sekurang-kurangnya satu baris teks huruf besar hadir.

Penggunaan:

Untuk menggunakan ungkapan biasa ini dalam Python, anda boleh menggunakan kod berikut:

<code class="python">import re

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

Anda kemudian boleh menggunakan kaedah padanan() untuk mencari padanan dalam rentetan:

<code class="python">match = pattern.match(text)
if match:
    text1 = match.group(1)
    text2 = match.group(2)</code>

Atas ialah kandungan terperinci Bagaimana untuk Menangkap Blok Teks Berbilang Baris dengan 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