Ich versuche, einen Stil auf eine Reihe von Wörtern anzuwenden, die am Anfang eines Absatzes und vor einem Doppelpunkt stehen.
Ich habe eine erste Grep-Suche vorbereitet, aber es funktioniert nicht (es setzt nur den Cursor vor den Doppelpunkt, ohne etwas auszuwählen ...
(?=^)*?(?=\:)
Irgendeine Idee?
Am Anfang hast du (?=^)
. Eine positive Vorausschau , die nach vorne schaut, um zu sehen, ob ein Absatzanfang nach dem Text kommt , den Sie vor der Vorausschau haben (in diesem Fall keiner). Dann haben Sie *?
die Suchanfragen für Null oder mehr Male (kürzeste Übereinstimmung) dieses positiven Lookahead . Es ist ein bisschen missgebildet. Sie wählen nicht wirklich irgendwelche Charaktere aus.
Damit Ihr Ansatz funktioniert, müssten Sie ein positives Lookbehind (?<=^)
verwenden , das nach hinten schaut, um zu sehen, ob ein Absatzanfang vor dem Text steht , ohne ihn auszuwählen. Verwenden Sie dann .*?
, um ein beliebiges Zeichen null oder mehrmals (kürzeste Übereinstimmung) und eine positive Vorausschau (?=:)
auszuwählen , um die Auswahl vor einem Doppelpunkt zu beenden:
(?<=^).*?(?=:)
Aber man kann es einfacher schreiben. ^
ist immer nicht übereinstimmend, also brauchen Sie das Lookbehind nicht:
^.*?(?=:)
Janus Bahs Jacquet
^
selbst ist nicht passend, also ist es überhaupt nicht notwendig, ein Lookbehind durchzuführen – tatsächlich hätte ich nicht gedacht, dass ein Lookbehind für a^
überhaupt funktionieren würde. Ihre Version wird jedoch auch mit nicht initialen Zeichenfolgen übereinstimmen (dh, wenn es zwei Doppelpunkte gibt, wird sie mit der Zeichenfolge dazwischen übereinstimmen), also^
wird a benötigt.*?
ist vollkommen gültig: Es ist ein nicht-gieriger Wildcard-Match. Sie könnten dies sogar verwenden, um die Abfrage etwas einfacher zu gestalten:^.*?:
stimmt mit dem überein^[^:]*:
(einschließlich Doppelpunkt) und^.*?(?=:)
stimmt mit dem überein^[^:]*(?=:)
(mit dem zusätzlichen^
).Janus Bahs Jacquet
(?=^)
per Definition nichts übereinstimmen kann, aber anscheinend syntaktisch nicht ungültig ist, also einer leeren, nicht übereinstimmenden Gruppe entspricht. Diese leere Gruppe (= alles, was keine nicht leere Übereinstimmung ist, dh jede Position zwischen Zeichen) wird dann nicht gierig abgeglichen bis zu einer Position, an der ein Doppelpunkt folgt (aus dem Lookahead) – das heißt, die Position zwischen Doppelpunkt und das unmittelbar davor stehende Zeichen. Definitiv keine normale Verwendung von GREP!Wolff
*?
das Bedürfnis verspüren .^
Für mich scheint das.*?(?=:)
genauso gut zu funktionieren wie^.*?(?=:)
. Sehen Sie hier und beachten Sie, dass die Zeichenfolge zwischen den Doppelpunkten nicht ausgewählt wird. Übersehe ich etwas?Wolff
Janus Bahs Jacquet
$
natürlich eine Absatzmarke oder ). Wenn Sie mit derselben Abfrage alle suchen/ersetzen, sollte auch die Zeichenfolge zwischen den Doppelpunkten übereinstimmen.Wolff
Wolff
Janus Bahs Jacquet