Regex: Zeilenvorschub vor bestimmtem String einfügen

Ich doktere mal wieder an einem regex-Ausdruck herum und kriege es nicht hin.

Konkretes Beispiel:
Am Ende eines Songtextes steht
"Written by: xxxxxxx",
allerdings nicht wie von mir gewünscht durch einen doppelten Zeilenvorschub vom vorausgehenden Text abgetrennt sondern nur durch einen einfachen.

Aufgabe:
In allen Fällen. in denen vor "Written by:" nur ein einfacher Zeilenvorschub vorliegt einen zusätzlichen einfügen.

Es müsste eigentlich gehen:
$regexp(%unsyncedlyrics%,Written by:\r\n,Written by:\r\n\r\n)
Und dann würde ich eine weitere Aktion hinterherschicken:

$regexp(%unsyncedlyrics%,\r\n\r\n\r\n,\r\n\r\n)
falls es schon irgendwo die richtige Menge Zeilenvorschübe gab und jetzt einer zuviel dazugekommen ist.

Du hast mich falsch verstanden. Es geht nicht um einen Zeilenvorschub nach dem String sondern vor dem String.

na gut, das tauscht lediglich die Reihenfolge:
$regexp(%unsyncedlyrics%,\r\nWritten by:,\r\n\r\nWritten by:)
Und dann würde ich eine weitere Aktion hinterherschicken:

$regexp(%unsyncedlyrics%,\r\n\r\n\r\n,\r\n\r\n)
falls es schon irgendwo die richtige Menge Zeilenvorschübe gab und jetzt einer zuviel dazugekommen ist.

1 Like

Meine Schwierigkeit rührte daher, dass ich nach einem Ausdruck suchte, der genau die Fälle betrifft, bei denen nur 1 Zeilenvorschub vor dem String existiert, nachdem ich auch filtern wollte.
Dein Vorschlag löst zwar das gestellte Problem über einen Umweg, hat aber als Nebeneffekt, dass dabei das mehrfache an Dateien angepackt wird, die ich nachher wieder mit einem Backup synchronisieren muss.

Betroffen wären eigentlich wohl nur 50-100 gewesen, angepackt wurden jedoch einige zigtausend.

Gibt es vielleicht einen Ausdruck der nur das 1-fache Vorkommen des Zeilenvorschubs filtert?

%unsyncedlyrics% MATCHES \r\nWritten AND NOT %unsyncedlyrics% MATCHES \r\n\r\nWritten

1 Like

Da hätte ich selber drauf kommen können. :wink:
Aber meine Gedanken kreisten immer in die Richtung eine rückwärtsgerichteten Quantifizierung.