Vorher:
Feld Artist: Artist Feat Artist
Titel: Titel
Nachher:
Feld Artist: Artist
Titel: Titel (feat. Artist
Die schließende Klammer fehlt 
Vorher:
Feld Artist: Artist Feat Artist
Titel: Titel
Nachher:
Feld Artist: Artist
Titel: Titel (feat. Artist
Die schließende Klammer fehlt 
Dieser Formatstring funktioniert für mich:
%TITLE% $regexp($regexp(%ARTIST%,'(.*)( | \(| \[)(featuring|feat|ft)\.? (.*)','(feat. $4) XXXXX $1',1),' (\)|\]) XXXXX ',' XXXXX ')Feld TITLE:
Title
Feld ARTIST:
Artist Feat Featartist
Ergebnis:
Title (feat. Featartist) XXXXX Artist
Aber ich glaube nicht, dass er komplett richtig ist.
Wahrscheinlich habe ich nur noch einen Fehler eingebaut, der den anderen Fehler austrickst.
Dieser Formatstring erzeugt dasselbe Ergebnis:
%TITLE% $regexp($regexp(%ARTIST%,'(.*)( | \(| \[)(featuring|feat|ft)\.? (.*)','(feat. $4) XXXXX $1',1),'(\)|\]) XXXXX ',') XXXXX ')DD.20110504.1048.CEST
==============================================================
Und dieser Quellformatstring sieht so aus, als müsste er passend sein:
%TITLE% $regexp(%ARTIST%,'^(.+?)\s+[[(]?(?:featuring|feat|ft)\.?\s+(.+?)[])]?\s*$','(feat. $2)=====$1',1)Feld TITLE:
Title
Feld ARTIST:
Artist Feat Featartist
Ergebnis Quellformatstring:
Title (feat. Featartist)=====Artist
Komplett als Aktion ...
Aktion:
Tag-Felder Importieren
Quellformat:
Formatstring:
%TITLE%=====%ARTIST%
Ergebnis im Tagfeld TITLE:
Title (feat. Featartist)
Ergebnis im Tagfeld ARTIST:
Artist
==============================================================
Der vorstehende Quellformatstring entdeckt folgende 'featuring' Literale:
ft
ft.
feat
feat.
featuring
featuring.
Eine Besonderheit stellt das zuletzt genannte Literal 'featuring.' dar.
Der Punkt in 'featuring.' ist sinngemäß überflüssig, könnte aber mehrfache Bedeutung haben.
Ist der Punkt ein Abkürzungspunkt oder ein Satzende?
Wenn ja, welchen Sinn hätte der Punkt an dieser Stelle?
Wäre der Punkt nur ein Schreibfehler?
Das sind Fragen, die aber nicht an dieser Stelle zu klären sind, denn das 'Säubern' von Daten sollte in einem vorherigen Schritt bereits geschehen sein.
Wenn wir sinnvolle Daten erwarten, dann brauchen wir nicht zu prüfen auf 'featuring.'.
Wer also nur die Liste sinnvoller Treffer prüfen will, der kann diesen Quellformatstring benutzen:
%TITLE% $regexp(%ARTIST%,'^(.+?)\s+[[(]?(?:ft\.?|feat\.?|featuring)\s+(.+?)[])]?\s*$','(feat. $2)=====$1',1)==============================================================
DD.20110504.1117.CEST
Edit.
DD.20110504.1241.CEST
Edit. Den Hilfstrenner geändert zu 5 x Gleichheitszeichen ohne Leerzeichen.
DD.20110504.1806.CEST
Edit. Ergebnisdarstellung ergänzt.
DD.20110505.0432.CEST
Edit. Alternativen Quellformatstring ergänzt.
DD.20110505.1030.CEST
Gut gelöst mit nur einer $regexp Funktion. Die zweite Klammer hat mich mit runden Klammer mit Alternativen echt gefuchst. Mit der eckigen Klammer geht das besser.
Was wir noch aufgefallen ist bei der Betrachtung deines Quellformatstrings: wir haben beide vergessen den optionalen Punkt nach featuring|feat|ft mit einem <!--colorc--> zu maskieren.
Also besser:
Ja tatsächlich, solche kleinen Fehler kommen wegen der selektiven Wahrnehmung für die größeren Dinge. Gut so, dass du es bemerkt und korrigiert hast, pone!
Das habe ich sicherheitshalber in meinem Beitrag auch korrigiert. Danke für den Hinweis.
DD.201100504.1239.CEST
Danke für eure Mühe.
Habe beide Möglichkeiten getestet.
Der neue String sieht deutlich übersichtlicher aus. MP3Tag vermedlet auch 5 Dateien umbenannt. Aber im Ergbnis sehe ich nix.
%TITLE%$regexp(%ARTIST%,'^(.+?)\s+[[(]?(?:featuring|feat|ft).?\s+(.+?)[])]?\s*$','(feat. $2)===$1',1)
%TITLE% === %ARTIST%
Der alte Strink funktioniert jetzt so wie er es soll.
%title% $regexp($regexp(%artist%,'(.)( | (| [)(featuring|feat|ft).? (.)','(feat. $4) XXXXX $1',1),' ()|]) XXXXX ',' XXXXX ')
Danke
'StGo', ... hmm... zum Ersten würde ich sagen, Abschreiben will gelernt sein, und zum Zweiten, da hast du Glück, dass es für deinen speziellen Fall funktioniert und du damit zufrieden bist.
Ich persönlich würde aber meine letzte kurze Regexp Version benutzen, denn die funktioniert für alle drei Fälle gleichermaßen gut (runde Klammer, eckige Klammer, keine Klammer).
DD.20110504.1812.CEST
Vielen Dank für dieses Wunderwerk der Technik!
Die letzte von DetlevD gezeigte Version funktioniert allerallerallerbestens!
Nochmals Danke an Euch beiden Spezial-Spezialisten. 
Der Rückwärtsschräger "entwertet" das folgende Zeichen, welches andernfalls eine besondere Bedeutung für die Syntax des Regulären Ausdrucks hätte, nämlich die Gruppierung von Häppchen - in diesem Fall wird die Klammer nun auch wirklich als Klammer genommen und nicht als Gruppierungsgrenze des dann folgenden Begriffs.
Diese Gruppierungen werden dann (von MP3tag intern) stumpf durchnummeriert und können per $1 bis $n angesprochen werden. Das siehst du mit $4 und $1.
All diese Informationen findest du auch in der Online-Hilfe zu MP3tag.
Vielen Dank für diese Anleitung DetlevD! Ich habe mein Sammlung jahrelang aufgebaut und habe nach genau so einer einfachen Möglichkeit gesucht, die Tags automatisiert abzuändern. Ich habe deinen Code testweise auf ein paar hundert Audiodateien angewendet und es hat super funktioniert. Nochmals Danke für deine tolle Arbeit!
Einziger kleiner Schönheitsfehler den ich gefunden habe taucht bei folgender Konstellation auf:
Ausgangs-Tagfeld ARTIST: Artist feat. Featartist (FeatartistGruppenName)
Ergebnis Tagfeld TITLE: Title (feat. Featartist (FeatartistGruppenName)
Hier müssten am Schluss des Titletags strenggenommen zwei Klammern stehen, also: Title (feat. Featartist (FeatartistGruppenName))
Ist aber nur ein Detail, jedoch kennst du evtl. gleich eine einfache Lösung ![]()
Nach dem erfolgreichen Um-Taggen würde ich dann noch die Dateinamen automatisiert umbenennen lassen. Dieser Schritt muss man einzeln in einem weiteren Schritt ausführen und kann nicht als Aktion angereiht werden oder?
Ausserdem erhalte ich dann bei sehr langen Dateinamen (z.B. bei vielen Feature-Artists) eine Fehlermeldung. Könnte man in diesen Fällen z.B. statt dem Dateinamen Artist - Title (feat. Featartist1, Featartist2 ...) folgendes generieren lassen: Artist - Title (feat. VA)
Na ja, das ist nicht nur ein Detail, sondern ein anderer Fall, aber doch ähnlich.
Vielleicht passt das ...
Aktion: "Tag-Feld formatieren"
Feld: _FILENAME
Formatstring: ' ... wie du willst ... '
Du kannst ein Hilfs-Tagfeld einrichten und dort die Länge messen ...
TMP_FEAT <== '(feat. Featartist1, Featartist2, Featartist3, Featartist4)' TMP_FEAT <== $iflonger(%TMP_FEAT%,30,$left(%TMP_FEAT%,30),%TMP_FEAT%) ... oder ... TMP_FEAT <== $iflonger(%TMP_FEAT%,30,'(feat. VA)',%TMP_FEAT%)... und das Ergebnis einbauen in den Ausdruck für den Dateinamen.
DD.20140822.1935.CEST
Danke vielmals! Das funktioniert einwandfrei, perfekt ![]()
das geht gut. ich hatte vorher eins, dass hat immer den interpreten in den titel geschrieben. nur wenn er einen interpreten mit feat. gefunden hat, dann hat der den richtig in den titel geschrieben.
Aber 1 hätte ich noch, wenn das feat. dann in klammern (.) gesetzt würde, wäre es top.
danke
EDIT:
Sorry, das was ich suche wird in Beitrag #26 final geklärt. Sorry fürs exhumieren.