Come catturare un paio di righe attorno a una partita regex?


8

Sto cercando un'espressione regex per abbinare un paio di righe sulla linea abbinata. Per esempio:

ABCDEFGHADEFGH
ABCDEFGHADEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
XXXXXXXX

Vorrei catturare le 2 linee sopra il XXXXXXXX.

Qualsiasi aiuto sarebbe apprezzato. Nota: con Python si utilizza la libreria re


1
Utilizzando quale software? Programmi diversi hanno idee diverse su cosa sia una regexp.
David Richerby,

Usi Python in modo specifico o in qualsiasi strumento / linguaggio?
Kenorb,

Se stai usando Python, potrebbe essere meglio scaricare l'intero in un array, dove ogni riga è il suo elemento. Quindi si passa in rassegna l'array, trovando XXXXXXXX, una volta trovato utilizzare l'indice di quell'elemento -1 e -2 per ottenere le righe.
LPChip,

ciao amico grazie per il consiglio, l'ho già fatto con un ciclo for ma mi chiedevo come fare con regex
takobaba

Risposte:


15

Il seguente RegEx verifica una quantità variabile di righe prima della XXXXXXXXriga e le restituisce nel primo gruppo di acquisizione.

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

  1. (.*\n)verifica una stringa che termina con \nuna nuova riga.
  2. {2} lo quantifica 2 volte.
  3. () questo assicura che tutte le linee rientrino in un gruppo di acquisizione.
  4. XXXXXXXX è la stringa con cui deve terminare il testo.

Ora in Python, è possibile utilizzare p.match(regex)[0]per restituire il primo gruppo di acquisizione.


4
Diffidare di ciò può causare problemi su Windows. In tal caso, prova \r\ninvece di limitarti a \n.
Qix - MONICA È STATA MISTREATA il

1
Ovviamente, questo corrisponderà solo a una riga che inizia con XXXXXXXX(ma non finisce necessariamente con XXXXXXXX).
G-Man dice "Reinstate Monica" l'

0

Aggiungendo alla risposta di erikgaal, usa un extra. * Prima di xxxxxx, per abbinare eventuali schede / spazi bianchi.

((. * \ N) {2}). * Xxxxxxx


1
Bene, .*non corrisponderà solo a schede / spazi; corrisponderà a qualsiasi cosa (ad esempio, "Il marrone rapido XXXXXXX").
G-Man dice "Reinstate Monica" l'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.