2017-05-15 4 views
0

Neu bei Regex, bitte helfen!Wie kann ich eine Zeichenfolge basierend auf einem bestimmten Wort zwischen zwei bestimmten Wörtern finden?

Beispiel String:

START 

    blahblah 
    blahblah blahblah 
    blahblahblahblah 

    blahblah KEYWORD blah 

    blahblah 
    blah 

END 

Problem: Ich möchte die gesamte Zeichenfolge (zwischen Beginn und Ende), die ein bestimmtes Schlüsselwort lokalisieren.

Kontext: Ich habe eine große Datei mit mehreren Iterationen der mehrzeiligen Beispielzeichenfolge START * END und muss diese Zeichenfolgen basierend auf dem darin enthaltenen KEYWORD sortieren. Jede Zeichenfolge enthält das gleiche START und END, aber ein anderes KEYWORD.

Was ich bisher haben:

START\s[\s\S]*?(?=END\s|\Z) returns the entire string, but is not specific to a KEYWORD 

Nicht sicher, wie über die Suche nach der gesamten Zeichenfolge auf dem STICHWORT Basis zu gehen.

Jede Hilfe wäre willkommen.

Danke!

+3

Wie unterscheiden Sie das Keyword von den umgebenden Blahblah? Ist der Blahblah immer genau derselbe? Gibt es eine feste Liste möglicher Keywords? –

+0

blahblah ist in jeder Zeichenfolge anders. Stellen Sie sich Blahblah als zufällige Zeichen, Whitespaces, Zeilenumbrüche, Zahlen usw. vor. – Macher

Antwort

2
(?s)(?<=START)(?:(?!END).)*?(?:KEYWORD1|KEYWORD2)(?:.*?)(?=END) 

(regex101) Erstens - wir eine neue Zeile als "beliebiges Zeichen" betrachten. Wir beginnen kurz nach START und enden kurz vor END. Dazwischen wollen wir eine möglichst geringe Anzahl von Zeichen, die die Zeichenkette END nicht starten, gefolgt von KEYWORD1 oder KEYWORD2, gefolgt von einer möglichst geringen Anzahl von Zeichen.

Dies basiert auf der Annahme, dass Sie eine endliche Liste von Schlüsselwörtern haben. Wenn auf der anderen Seite Schlüsselwörter auf andere Weise identifiziert werden, sollten Sie zuerst Michael Butschers Kommentar kommentieren.

Verwandte Themen