Bagaimana untuk Menangkap Blok Teks Berbilang Baris dengan Ungkapan Biasa?

Patricia Arquette
Lepaskan: 2024-10-25 06:05:02
asal
786 orang telah melayarinya

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

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

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

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

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!

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!