bedingtes Tauschen in ARTISTSORTORDER

Ich möchte %albumsortorder% nach einem ganz bestimmten eindeutigem Muster ersetzen, allerdings auf zwei verschiedene Arten. Auswahlkriterium ist die Tatsache, ob die Zeichenfolge " & " vorkommt oder nicht.

Tauschen vor - name nach ARTISTSORTORDER erstes Leerz. mit &
Regulärer Ausdruck
(.+?), (.+) & (.+)
Treffer ersetzen durch
$2 $1

Tauschen vor - name nach ARTISTSORTORDER erstes Leerz. ohne &
Regulärer Ausdruck
(.+?), (.+)
Treffer ersetzen durch
$2 $1

Z. Zt. Treffe ich manuell die jeweilige Auswahl und wende die Aktionen einzeln an. Das ist sehr fehlerträchtig, weil leicht ein & übersehen werden kann. Nun möchte ich eine Aktion formulieren, bei der ich ohne manuelle Selektion eine pauschale Anwendung durchführen kann. Mir schwebt so etwas wie "Wenn - dann - sonst" vor. Diesbezügliche Versuche sind allderdings bei mir gescheitert. Wie wäre das machbar?

Hallo Manfred,
mit dem Mp3tag Filter sollten die unterschiedlichen Fälle gut sichtbar werden.

Funktioniert es damit für beide Fälle?
$regexp($regexp(%TEST%,'\s&\s.+$',),'^(.+?),\s(.+)$','$2 $1')

Vorher:
aaa, bbb & ccc
Nachher:
bbb aaa

DD.20100530.1538.CEST

$regexp($regexp(%TEST%,'\s&\s.+$',),'^(.+?),\s(.+)$','$2 $1')

Vorher:
aaa, bbb & ccc
Nachher:
bbb aaa

Ich habe es ausprobiert. Es funktioniert. Danke!

Allerdings habe ich es nicht in allen Deteils verstanden. Mit der Hilfe der mp3-Hilfe habe ich versucht, den Ausdruck nachzuvollziehen. Die verschachtelte Klammerung ist wohl so:

$regexp($regexp(%TEST%,'\s&\s.+$',),'^(.+?),\s(.+)$','$2 $1')

                           ------    --------     -             
                           what    expr       repl   
    ---------------------------  --------------  ------
    what                            expr            repl

^(.+?) und \s(.+)$ sind auch klar. Aber wozu werden die '(Hochkomma) gebraucht?

Leider ist die Hilfe bei v2.46a nur noch in Englisch. Oder habe ich Deutsch nicht gefunden?

Es funktioniert auch für den Fall wunschgemäß, wenn kein Komma vorkommt. Dann soll nur der Rest nach & abgeschnitten werden.
Vorher:
aaa bbb & ccc
Nachher:
aaa bbb

Ja das ist wohl immer so, wenn man wegen fehlender oder ungenauer Vorgaben nicht alle Fälle bei der Entwicklung berücksichtigt, dann treten eben auch Seiteneffekte auf, die bestenfalls ohne böse Folgen bleiben.

Ich benutze das Umschließen mit Hochkomma immer dann, wenn eigentlich richtigerweise eine Zeichenkette erwartet wird. Dass der Mp3tag Skriptinterpreter auch mit Ausdrücken umgehen kann, die (im Vergleich zu anderen Skriptsprachen) eigentlich nicht ganz korrekt geschrieben sind, das kann man einerseits als Komfort, aber auch als Fehlentwicklung betrachten.
Insbesondere bei der Funktion $regexp() dient das Umschließen mit Hochkomma der Sicherheit der Parameter Ausdrücke, so braucht man bestimmte Zeichen im Parameter Ausdruck eben nicht einzeln zu literalisieren. Und außerdem benutze ich einen Editor mit Syntaxcolorierung, der nur richtig geschriebene Syntax richtig darstellt.

Den folgenden Ausdruck habe ich für folgende vier Fälle entworfen und getestet:
vorher: aaa bbb
nachher: aaa bbb
(keine Änderung)

vorher: aaa bbb & ccc
nachher: aaa bbb & ccc
(keine Änderung)

vorher: aaa, bbb
nachher: bbb aaa

vorher: aaa, bbb & ccc
nachher: bbb aaa

$if($eql($regexp(%TEST%,'^(.+?)(,\s.+?)(\s&\s.+?)?$',),%TEST%),%TEST%,$regexp($regexp(%TEST%,'\s&\s.+$',),'^(.+?),\s(.+)$','$2 $1'))

DD.20100531.1748.CEST

Danke für die Erläuterung und den Code. Aus Zeitgründen habe ich ihn noch nicht ausprobieren können. Ist Fall 2 ein Schreibfehler oder Absicht. Denn: Wenn kein Komma vorkommt, dann soll nur der Rest nach & abgeschnitten werden.

Ich habe $regexp($regexp(%TEST%,'\s&\s.+$',),'^(.+?),\s(.+)$','$2 $1') mit wenigen Datensätzen getestet, wie berichtet: Es funktioniert!
Allerdings sieht die Lage bei vielen Datensätzen anders aus: Mpetag stürst ab ! Schade.
Ich habe jetzt mal eine mittlere Variante, ca. 9000 Datensätze, ausprobiert. Ersetzungszeit > 1 h, aber kein Absturz! Bei insgesamt 200000 Datensätzen ist das wenig praktikabel. Schade!