Bagaimana cara menangkap beberapa garis di sekitar pertandingan regex?

8

Saya mencari ekspresi regex untuk mencocokkan beberapa baris pada baris yang cocok. Sebagai contoh:

ABCDEFGHADEFGH
ABCDEFGHADEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
XXXXXXXX

Saya ingin menangkap 2 baris di atas XXXXXXXX.

Bantuan apa pun akan dihargai. Catatan: dengan Python menggunakan library re

takobaba
sumber
1
Menggunakan perangkat lunak apa? Program yang berbeda memiliki ide yang berbeda tentang apa itu regexp.
David Richerby
Menggunakan Python secara khusus atau dalam alat / bahasa apa pun?
kenorb
Jika Anda menggunakan python, mungkin lebih baik untuk membuang keseluruhan ke dalam array, di mana setiap baris adalah elemennya sendiri. Anda kemudian loop melalui array, menemukan XXXXXXXX, setelah ditemukan gunakan indeks item -1 dan -2 untuk mendapatkan baris.
LPChip
hi man terima kasih atas sarannya, saya sudah melakukannya dengan for loop tetapi bertanya-tanya bagaimana caranya dengan regex
takobaba

Jawaban:

15

RegEx berikut menguji jumlah variabel garis sebelum XXXXXXXXgaris dan mengembalikannya dalam kelompok tangkapan pertama.

((.*\n){2})XXXXXXXX

  1. (.*\n)tes untuk string yang diakhiri dengan \n, baris baru.
  2. {2} menghitung ini 2 kali.
  3. () sekitar itu memastikan semua garis datang dalam satu kelompok tangkap.
  4. XXXXXXXX adalah string yang harus diakhiri dengan teks.

Sekarang dengan Python, Anda dapat menggunakan p.match(regex)[0]untuk mengembalikan grup tangkapan pertama.

erikgaal
sumber
4
Berhati-hatilah karena ini dapat menyebabkan masalah pada Windows. Jika ya, coba \r\nbukan hanya \n.
Qix - MONICA DISALAHKAN
1
Tentu saja, ini hanya akan cocok dengan garis yang dimulai dengan XXXXXXXX(tetapi tidak harus diakhiri dengan XXXXXXXX).
G-Man Mengatakan 'Reinstate Monica'
0

Menambah jawaban erikgaal, gunakan tambahan. * Sebelum xxxxxx, untuk mencocokkan tab / spasi putih.

((. * \ n) {2}). * xxxxxxx

Suraj Ravindra Khurana
sumber
1
Nah, .*tidak akan cocok hanya tab / spasi; itu akan cocok dengan apa pun (misalnya, "XXXXXXX cokelat cepat").
G-Man Mengatakan 'Reinstate Monica'