Ersetze alles nach eckiger Klammer mit *nix*

In dem Regulären Ausdruck ist diese Funktion enthalten, z. B. "\2" ist die Referenz auf die zweite Subgruppe. Das ist der einzige Trick, alles andere ist sozusagen Kosmetik.

Dieser Thread entwickelt sich langsam nach dem Motto "wie mache ich aus einer Maus einen Elefanten".
Taubi, es kommt mir so vor als ob du immer wieder mit anderen Varianten deiner ursprünglichen Fragestellung kommst. Ein Regulärer Ausdruck, der alle Varianten gleichermaßen berücksichtigt, der benötigt mehr Gehirnschmalz und mehr Entwicklungs- und Testzeit.

Vielleicht sorgst du erst einmal in kleinen Schritten dafür, dass die unterschiedlichen Fälle jeweils in einem eigenen Durchgang "gleich gemacht werden". Du kannst die unterschiedlichen Fälle mit der Filterfunktion selektieren.

Ansonsten ... habe ich deine letzten Beispiele im Tag-Filename Konverter geprüft.
Den Schrägstrich habe ich ersetzt durch die Raute, weil an dieser Stelle die Eingabe als Dateiname behandelt wird und Schrägstriche automatisch entfernt werden. Prinzipiell funktioniert das.

Diese Beispiele geben gute Resultate:

$regexp('The Circle [CD Album]#CD Album','^(.+\s+)(?:\[(.+?)\])\#\2(?:|(\s+.+))$','$1[$2]$3')
The Circle [CD Album]#CD Album
The Circle [CD Album]

$regexp('Concert [Live]#Live in London','^(.+\s+)(?:\[(.+?)\])\#\2(?:|(\s+.+))$','$1[$2]$3')
Concert [Live]#Live in London
Concert [Live] in London

$regexp('Bounce [European Union]#European Union','^(.+\s+)(?:\[(.+?)\])\#\2(?:|(\s+.+))$','$1[$2]$3')
Bounce [European Union]#European Union
Bounce [European Union]

$regexp('Last Man Standing [Live (Boston, MA 12-10-05)]#Live (Boston, MA 12-10-05)','^(.+\s+)(?:\[(.+?)\])\#\2(?:|(\s+.+))$','$1[$2]$3')
Last Man Standing [Live (Boston, MA 12-10-05)]#Live (Boston, MA 12-10-05)
Last Man Standing [Live (Boston, MA 12-10-05)]

In diesem Beispiel gibt es ein Problem:
$regexp('Lovin' You [Europe / Oz 4 Trk]#Europe / Oz 4 Trk','^(.+\s+)(?:\[(.+?)\])\#\2(?:|(\s+.+))$','$1[$2]$3')

Das einzelne Apostrophzeichen am Ende des Wortes Lovin.
Das bringt das Skripting durcheinander.
Die Verwendung dieses Sonderzeichens ist in Mp3tag nur unter bestimmten Umständen erlaubt, siehe Mp3tag Hilfe. Das Zeichen muss eskapiert werden.

... Nun bin ich aber schon ziemlich müde, und muss schlafen gehen ...
Gute Nacht.

DD.20100104.2233.CET

Wo bitte steht sowas? Das es solche Funktionen in regulären Ausdrücken gibt, weiß ich wohl. Aber wo bekomme ich den genauen Syntax, der in Mp3tag gilt. In der Hilfe zumindest steht das nicht.

Oder hilft nur Probieren? Zumindest Florian sollte ja alle Funktionen kennen.

mfG
gnor

Hallo Detlev,

also aus meiner Sicht, habe ich immer das selbe beschrieben, ich glaube nur, ich habe mich immer noch nicht verständlich genug ausgedrückt.

Nochmal ein ganz brandaktuelles Beispiel:

Um jetzt nochmal mein Problem zu erklären: ich möchte bei jedem Eintrag in den Album-Tags die doppelte Info nach dem Slash entfernen und ebenso in den Titel-Tags.

Leider komme ich nur nicht mit den regulären Ausdrücken von Mp3Tag klar ...

Ich könnte hier aber mal einen naiven Algorithmus anbieten:

if { Tagfeld enthält "[" and "]/" } then
  begin
    Maske := kopiere Text zwischen "[" und "]/";
    if { Maske folgt auf "]/" } then
      begin
        Teilstring := "/"+Maske;
        lösche Teilstring aus Tagfeld;
      end;
  end;

Bitte um weiter Hilfe. Danke.

$reverse($regexp($reverse(%TITLE%),'^.+\/(.+)$','$1'))
von:
No Security [134 Version]/134 Version
nach:
No Security [134 Version]

DD.20100105.2142.CET

Hallo Detlev,

also diese Funktion funktioniert soweit ersteinmal, nur das Problem ist, dass sie agressiv ab dem ersten Slash löscht.
D.h. dass ich bei Beispielen wie denen von oben, unerwünschte Ergebnisse erhalte:

"Lovin' You [Europe / Oz 4 Trk]/Europe / Oz 4 Trk" wird zu "Lovin' You [Europe " und
"Everyday Live/Acoustic" wird zu "Everyday Live"

wobei aber

"Lovin' You [Europe / Oz 4 Trk]" und
"Everyday Live/Acoustic"

die gewünschten Ergebnisse wären ...

Wie gesagt, deine Beispiele variieren von Fall zu Fall ...

$reverse($regexp($reverse(%TITLE%),'^.+\/(].+)$','$1'))
von:
Lovin' You [Europe / Oz 4 Trk]/Europe / Oz 4 Trk
nach:
Lovin' You [Europe / Oz 4 Trk]

DD.20100105.2205.CET

... und das funktioniert auch mit passenden Eingabewerten...

$regexp(%TITLE%,'(?<=])\/.+$',)
von:
Lovin' You [Europe / Oz 4 Trk]/Europe / Oz 4 Trk
nach:
Lovin' You [Europe / Oz 4 Trk]

DD.20100106.1432.CET