2017-06-01 7 views
-1

Ich habe buchstäblich zwei volle Tage hier auf Google und auf Regex101 suchen, bevor Sie gefragt.
Hier ist, was meine Dateien (Tausende von ihnen) wie folgt aussehen:Regex Sublimetext Ersetzen einer wiederkehrenden Zeichenfolge in einer Textdatei nach einer bestimmten Zeichenfolge

FIRST LINE THAT MIGHT CONTAIN ON . 
SECTION1 
SOME TEXT THAT MIGHT CONTAIN ON . 
SECTION2 
ON 04/1/2017 SOME TEXT 
ON 25/1/2017 SOME TEXT 
ON 15/2/2017 SOME TEXT 

ich alle ON Vorkommen in TEIL 2 nur entfernen müssen.
Ich kann nicht offensichtlich die Muster, die nicht über zwei Tage Versuch und Irrtum funktioniert haben. (Es wäre Suchmaschinen mit irrelevanten Sachen werden überschwemmt mit meinem begrenzten Verstand beweisen - auf den Gegenstand, der ;-) ist

+0

Gibt es eine 'SECTION3' oder nach' SECTION2's Inhalt die Datei os über? – acdcjunior

+0

Es gibt keine SEKTION3. Das ist so ziemlich die Vorlage der Dateien. (Obwohl ich darüber nachgedacht habe, am Ende jeder Datei ein "Tag" hinzuzufügen, kann ich aber nicht alle überprüfen, es muss ausfallsicher sein) – manuchap

+1

Wenn Sie sicher sind, dass die ONs von SECTION2 immer sind am Anfang der Zeile (und SECTION1 und andere nicht) können Sie '^ ON' verwenden. – acdcjunior

Antwort

1

Sie es mit diesem Muster tun können:

(?:\G(?!\A)|\A(?>.*\R)*?SECTION2\h*\R)(?>.*\R)*?\KON\h 

demo

Die Idee besteht darin, ein Muster zu erstellen, das nur zusammenhängende Übereinstimmungen mit dem Anker \G zurückgibt. Dieser Anker ist am Anfang der Zeichenfolge oder an der Position nach einer erfolgreichen Übereinstimmung erfolgreich.

Muster Details:

(?: # non-capturing group: two possible starts 
    \G(?!\A) # the position after a previous match 
    |   # OR 
    \A(?>.*\R)*?SECTION2\h*\R # reach the first occurrence of SECTION2 from the start 
) 
(?>.*\R)*? # match lazily eventual lines that don't start with ON 
\K   # remove all on the left from the match result 
ON\h  # and keep only ON with a trailing space 

(?!\A) die erste Filiale verbietet zu Beginn des Strings, auf diese Weise das erste Spiel verwendet immer den zweiten Zweig (nur eine Zeit, da sie mit \A beginnt) erfolgreich zu sein. Die nächsten Übereinstimmungen verwenden immer die erste Verzweigung. Dies zwingt alle Vorkommen von ON dazu, nach SEKTION 2 zu sein.

+1

Brilliant! Danke soooo. Und danke auch für die Erklärungen. Massive Gloubiboulga an dich ;-) (so eine Erleichterung meine Wirbelsäule tatsächlich geknackt) – manuchap

Verwandte Themen