# \[Hilfe\] feat. von artist nach title

**URL:** <https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291>\
**Category:** Allgemein\
**Created:** [December 14, 2010, 4:43pm UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291 "2010-12-14T16:43:55Z")\
**Posts on this page:** 12\
**Page:** 2

<div class="post-metadata">

**Author:** ![StGo](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/s/898d66/32.png) [@StGo](https://community.mp3tag.de/u/StGo)\
**Post date:** [May 4, 2011, 3:27am UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/21 "2011-05-04T03:27:04Z")

</div>

Vorher:  
Feld Artist: Artist Feat Artist  
Titel: Titel

Nachher:  
Feld Artist: Artist  
Titel: Titel (feat. Artist

Die schließende Klammer fehlt 🙂

---

<div class="post-metadata">

**Author:** ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)\
**Post date:** [May 4, 2011, 6:17am UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/22 "2011-05-04T06:17:41Z")

</div>

> [@StGo](#):
>
> ... 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

---

<div class="post-metadata">

**Author:** ![pone](https://community.mp3tag.de/user_avatar/community.mp3tag.de/pone/32/272_2.png) [@pone](https://community.mp3tag.de/u/pone)\
**Post date:** [May 4, 2011, 7:47am UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/23 "2011-05-04T07:47:35Z")

</div>

> [@DetlevD](#):
>
> 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:  
> _Title (feat. Featartist) === Artist_
> 
> Komplett als Aktion ...  
> Aktion: Tag-Felder Importieren  
> Quellformat:   
> Formatstring: %TITLE% === %ARTIST%
> 
> DD.20110504.1117.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:

**%TITLE% $regexp(%ARTIST%,'^(.+?)\s+[[(]?(?:featuring|feat|ft)\.?\s+(.+?)[])]?\s\*$','(feat. $2) === $1',1)**

---

<div class="post-metadata">

**Author:** ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)\
**Post date:** [May 4, 2011, 8:35am UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/24 "2011-05-04T08:35:02Z")

</div>

> [@pone](#):
>
> Gut gelöst mit nur einer $regexp Funktion. ... Was wir noch aufgefallen ist bei der Betrachtung deines Quellformatstrings: wir haben beide vergessen den optionalen Punkt ... zu maskieren. ...

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

---

<div class="post-metadata">

**Author:** ![StGo](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/s/898d66/32.png) [@StGo](https://community.mp3tag.de/u/StGo)\
**Post date:** [May 4, 2011, 9:28am UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/25 "2011-05-04T09:28:25Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)\
**Post date:** [May 4, 2011, 2:00pm UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/26 "2011-05-04T14:00:06Z")

</div>

> [@StGo](#):
>
> ... 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

---

<div class="post-metadata">

**Author:** ![ruesay](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ruesay/32/239_2.png) [@ruesay](https://community.mp3tag.de/u/ruesay)\
**Post date:** [May 4, 2011, 5:42pm UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/27 "2011-05-04T17:42:42Z")

</div>

Vielen Dank für dieses Wunderwerk der Technik!

Die letzte von DetlevD gezeigte Version funktioniert allerallerallerbestens!

Nochmals Danke an Euch beiden Spezial-Spezialisten. 😃

---

<div class="post-metadata">

**Author:** ![ohrenkino](https://community.mp3tag.de/user_avatar/community.mp3tag.de/ohrenkino/32/4843_2.png) [@ohrenkino](https://community.mp3tag.de/u/ohrenkino)\
**Post date:** [May 5, 2011, 3:06am UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/28 "2011-05-05T03:06:40Z")

</div>

> [@StGo](#):
>
> (feat. gibt später im Titel (feat. aus.
> 
> Was bedeuten die $4 und $1 ?

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.

---

<div class="post-metadata">

**Author:** ![steccer](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/s/a3d4f5/32.png) [@steccer](https://community.mp3tag.de/u/steccer)\
**Post date:** [August 22, 2014, 1:50pm UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/29 "2014-08-22T13:50:58Z")

</div>

> [@DetlevD](#):
>
> 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_

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** )_

---

<div class="post-metadata">

**Author:** ![DetlevD](https://community.mp3tag.de/user_avatar/community.mp3tag.de/detlevd/32/123_2.png) [@DetlevD](https://community.mp3tag.de/u/DetlevD)\
**Post date:** [August 22, 2014, 2:45pm UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/30 "2014-08-22T14:45:06Z")

</div>

> [@steccer](#):
>
> ... 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 😉 ...

Na ja, das ist nicht nur ein Detail, sondern ein anderer Fall, aber doch ähnlich.  
Vielleicht passt das ...

**%TITLE%' '$regexp(%ARTIST%,'^(.+?)\s+[[({]?(?:ft\.?|feat\.?|featuring)\s+([^][(){}]+)[])}]?(\s+.+)?$','(feat. $2$3)=====$1',1)**

> [@steccer](#):
>
> ... 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? ...

Aktion: "Tag-Feld formatieren"  
Feld: \_FILENAME  
Formatstring: _' ... wie du willst ... '_

> [@steccer](#):
>
> ... 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) ...

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

---

<div class="post-metadata">

**Author:** ![steccer](https://community.mp3tag.de/letter_avatar_proxy/v4/letter/s/a3d4f5/32.png) [@steccer](https://community.mp3tag.de/u/steccer)\
**Post date:** [August 23, 2014, 8:23am UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/31 "2014-08-23T08:23:43Z")

</div>

> [@DetlevD](#):
>
> Na ja, das ist nicht nur ein Detail, sondern ein anderer Fall, aber doch ähnlich.  
> Vielleicht passt das ...
> 
> **%TITLE%' '$regexp(%ARTIST%,'^(.+?)\s+[[({]?(?:ft\.?|feat\.?|featuring)\s+([^][(){}]+)[])}]?(\s+.+)?$','(feat. $2$3)=====$1',1)**
> 
> Aktion: "Tag-Feld formatieren"  
> Feld: \_FILENAME  
> Formatstring: _' ... wie du willst ... '_

Danke vielmals! Das funktioniert einwandfrei, perfekt 🙂

---

<div class="post-metadata">

**Author:** ![radix](https://community.mp3tag.de/user_avatar/community.mp3tag.de/radix/32/23384_2.png) [@radix](https://community.mp3tag.de/u/radix)\
**Post date:** [June 17, 2015, 7:56pm UTC](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291/32 "2015-06-17T19:56:44Z")

</div>

> [@pone](#):
>
> Aktion:  
> Tag-Felder importieren  
> Quellormat:  
> %title% $regexp($regexp(%artist%,(._)( | '('| '[')(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Fe  
> at.|FEAT.) (._),feat. $4 XXXXX $1),(')'|']') XXXXX , XXXXX )  
> Formatstring:  
> %title% XXXXX %artist%

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](https://community.mp3tag.de/t/11291/26) final geklärt. Sorry fürs exhumieren.

[Previous page](https://community.mp3tag.de/t/hilfe-feat-von-artist-nach-title/11291.md?page=1)
