Hallo,
ich habe folgendes Problem. Wenn der Interpret z.B. David Guetta feat. Kid Cudi heisst, so möchte ich als ArtistSort Guetta , David feat. Cudi, Kid haben.
Vergleichbares habe ich im Forum ncht gefunden.
Ich stelle mir das so vor: Der Cursor steht auf dem Vornamen und wird hinter dem nächsten Wort kopiert. Ist so etwas möglich?
Danke für die schnelle Antwort. Aber genau meine Fragestellung ist dort nicht gelöst. Newbie Ignorance...ARTISTSORT
Ich befürchte, ich muss mich doch noch in RegEx einarbeiten.
Aber Danke für die Hinweise. Ich habe zumindest die ersten Ansätze.
Ist das überhaupt Sinnvoll. Damit kannst du zwar David Guetta und Guetta finden. Aber Cudi, Kie bleibt bringt doch nichts, da es eh nicht am Anfang steht.
"Gueatta, David feat. Kid Cudi" wäre daher meineserachtens viel sinnvoller. Und vor allem auch einfacher umsetzbar.
Mit dem "feat." in der Mitte bringst du aber einen neuen Sonderfall ins Spiel.
Geht aber auch alles.
Potentiell Probleme machen die Tatsache dass es Nachnamen gibt, die aus zwei Wörtern bestehen und in deinem Fall wahrscheinlich unterschiedliche Schreibweisen von feat.
Die Aktion wäre immer
Aktion: Tag-Feld formatieren
Feld: ARTISTSORT
und der Formatstring je nachdem:
$regexp(%artist%,(.) (.) (feat.),$2',' $1 $3)
würde dein Beispiel nach meinem Vorschlag umwandeln
$regexp(%artist%,(.) (.) (feat.) (.) (.),$2',' $1 $3 $5',' $4)
wie von dir gewünscht.
So weit so gut, das geht jetzt aber nur für Künstler deren Nachnamen ein Wort ist (mit beliebig vielen Vornamen.
Bei zusammengesetzten Nachnamen ein Fragezeichen einfügen. Dann darf der Vorname allerdings nur aus einem Wort bestehen:
$regexp(%artist%,(.?) (.) (feat.) (.?) (.),$2',' $1 $3 $5',' $4)
wenn beide Künstler einen zusammengesetzten Nachnamen haben
$regexp(%artist%,(.?) (.) (feat.) (.) (.),$2',' $1 $3 $5',' $4)
wenn nur der erstgenannte Künstler einen zusammengesetzten Nachnamen hat
$regexp(%artist%,(.) (.) (feat.) (.?) (.),$2',' $1 $3 $5',' $4)
wenn nur der zweitgenannte Künstler einen zusammengesetzten Nachnamen hat
Wenn dann auch noch verschiedene Schreibweisen von "feat." ins Spiel kommen, musst du die (feat.) Klammer anpassen. Hier lassen sich aber alternativen verwenden, so das man immer mit dem selben Formatstring arbeiten kann.
(feat.)
mit
(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.)
ersetzen.
Also z. B.:
$regexp(%artist%,(.) (.) (featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.) (.),$2',' $1 $3 $5',' $4)
wenn du die jeweilige Schreibweise von feat. auch so beibehalten willst.
oder:
$regexp(%artist%,(.) (.) (featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Feat.|FEAT.) (.) (.),$2',' $1 feat. $5',' $4)
wenn du sie bei der gelegenheit gleich auf "feat." vereinheitlichen willst.
Edit: hab den feat Teil nochmal etwas gekürzt indem ich ihn in drei Teile aufgespalten hab:
(f|F)(eaturing|EATURING|eat|EAT|t|T|)(.|)
entspricht
(featuring|Featuring|FEATURING|ft|Ft|FT|ft.|Ft.|FT.|feat|Feat|FEAT|feat.|Fe
at.|FEAT.)
jetzt brauchst du halt auch dann auch drei "$n" um dich darauf zu beziehen, weil es jetzt drei Klammern sind. Also statt $3 jetzt $3$4$5
Danke Dano, hab's ausgebessert. Hoffe mit ist dabei sonst nichts verrutscht, so dass noch alles funkioniert.
Irgenwann lern ich's noch wann man ' ' und wann man \ braucht, bzw was der Unterschied dabei ist.
Der Backslash dient zur Entwertung von Sonderzeichen in der Regex Sprache.
Das einfache Apostroph, paarweise benutzt, dient zur Entwertung von Sonderzeichen in der Mp3tag Sprache ('Stringularisierung').
und die Klammer muss bei $regexp '(' geschrieben werden weil sie sowohl in der Mp3Tag-Sprache als auch in der Mp3tag Sprache eine besonder Funktion hat. Ich glaub ich hab's verstanden.
Hmm, das würde ich der Parser Hierarchie gemäß anders schreiben.
Von außen betrachtet wird zuerst die Mp3tag Sprache gesehen, dann die Regex Sprache.
$regexp(%TAGFIELD%,'Regex Expression String','Replacement String',IgnoreCaseOption)
... so dass im Regex Ausdruck die Entwertung von "Runde Klammer Auf" sofort auf derselben Sprachebene geschieht (, was der Schreibweise entspricht '(', wenn man nur die eine Klammer entwerten will.
Die Ignore Case Option ist der vierte Parameter in der Funktion $regex(), was im Mp3tag Hilfe Manual nur kurz beschrieben steht.
Eine solche Gruppe (?:regex) klammert, aber hält nichts fest. (?:regex) Non-capturing parentheses group the regex so you can apply regex operators, but do not capture anything and do not create backreferences.
Ah, ok. Das mit "Ignore Case" hab ich schon mal gelesen. Aber ich dachte immer da sollten Ausdrücke in bestimmten Fällen ignoriert werden. Das damit Groß- und Kleinschrbeibung gemeint ist, soweit hab ich nicht geschaltet. Eigentlich logisch. Und die deutsche Hilfe hab ich scheinbar auch nicht zurate gezogen. Selber Schuld.
Das mit Klammern die nichts halten ist auch nicht schlecht zu wissen.
Und das .? anstelle von (.|) ist auch nicht schlecht. So muss man das nicht mehr in eine extra Klammer schreiben.
Die Zerlegung der feat... Ausdrücke ist damit überflüssig geworden. Ich hab das ja nur gemacht
damit die Klammer nicht ganz so lang wird.