Wie erfasse ich ein paar Zeilen um ein Regex-Match?

8

Ich suche nach einem regulären Ausdruck, um ein paar Zeilen über die übereinstimmende Zeile abzugleichen. Zum Beispiel:

ABCDEFGHADEFGH
ABCDEFGHADEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
ABCDEFGHABCDEFGHABCDEFGH
XXXXXXXX

Ich möchte die 2 Zeilen über dem XXXXXXXX erfassen.

Jede Hilfe wäre dankbar. Hinweis: Verwenden Sie bei Python die Bibliothek re

Takobaba
quelle
1
Mit welcher Software? Verschiedene Programme haben unterschiedliche Vorstellungen davon, was ein regulärer Ausdruck ist.
David Richerby
Verwenden Sie Python speziell oder in einem beliebigen Tool / einer anderen Sprache?
Kenorb
Wenn Sie Python verwenden, ist es möglicherweise besser, das Ganze in ein Array zu verschieben, in dem jede Zeile ein eigenes Element ist. Anschließend durchlaufen Sie das Array und finden XXXXXXXX. Sobald Sie es gefunden haben, verwenden Sie den Index dieses Elements -1 und -2, um die Zeilen abzurufen.
LPChip
Hallo Mann, danke für den Rat, ich habe es bereits mit einer for-Schleife gemacht, mich aber gefragt, wie ich mit Regex
umgehen soll

Antworten:

15

Das folgende RegEx testet eine variable Anzahl von Zeilen vor der XXXXXXXXZeile und gibt sie in der ersten Erfassungsgruppe zurück.

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

  1. (.*\n)testet auf eine Zeichenfolge, die mit \neinem Zeilenumbruch endet.
  2. {2} quantifiziert dies 2 mal.
  3. () Dadurch wird sichergestellt, dass alle Zeilen in einer Erfassungsgruppe enthalten sind.
  4. XXXXXXXX ist die Zeichenfolge, mit der der Text enden muss.

In Python können Sie jetzt p.match(regex)[0]die erste Erfassungsgruppe zurückgeben.

erikgaal
quelle
4
Seien Sie vorsichtig, dies kann unter Windows zu Problemen führen. Wenn ja, versuchen Sie es \r\nstatt nur \n.
Qix - MONICA wurde am
1
Dies entspricht natürlich nur einer Zeile, die mit beginntXXXXXXXX (aber nicht unbedingt mit endet XXXXXXXX).
G-Man sagt 'Reinstate Monica'
0

Verwenden Sie vor der Antwort von erikgaal ein zusätzliches. * Vor xxxxxx, um Tabulatoren / Leerzeichen zuzuordnen.

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

Suraj Ravindra Khurana
quelle
1
Nun, .*passt nicht nur zu Tabulatoren / Leerzeichen. es passt zu allem (z. B. "The quick brown XXXXXXX").
G-Man sagt 'Reinstate Monica'