ARTIST-Tag nach MB Picard nicht teilbar

Passt in dieses Schema auch
Artist: Sigala, Fuse ODG & Sean Paul
TITLE: Feels Like Home <feat. Kent Jones>
Du kannst ja mal gucken, ob sowas in die Nähe kommt:
$replace($regexp($regexp(%artist%,(.*)\\(.*),$1 & $2),(.*?)\\(.*),$1 & $2),\, feat. )

Voraussetzung ist, dass der ARTIST gefüllt ist mit sowas wie im Beispiel:

Mir ist schon klar, das die Komplexität des Beispiels unendlich sein kann.

Von zwei Voraussetzungen ausgehend könnte es theoretisch möglich sein:

ARTIST ist ein durchgehender String
ARTISTS ist ein mulitvalue-Feld in dem die ARTIST (zwingend) enthalten sein müssen.
Die JOINs sind die Teile zwischen den ARTISTS. Welche Werte die einnehmen, bestimmt ja MB als führendes System.

Nur so kann ein Parser sinnvoll arbeiten.
Meine Schwierigkeit liegt darin die join-Werte aus ARTIST zu ermitteln und in JOIN zu übertragen.
ARTIST kann ja aus ARTISTS kopiert werden.

Mein Beispiel funktioniert ja mit 4 Künstlern ...
Wer setzt denn nach welchen Kriterien welches Wort in JOIN?
Woher weiß man, an der wievielten Stelle das "feat. " hin muss?
Geht es darum, einen bestehenden ARTIST auseinanderzunehmen und das Wort mit Kleinbuchstaben zu erkennen?
$regexp('David Guetta & Afrojack feat․ Charli XCX with French Montana',.*?( \l.*? ).*,$1)
gibt "feat." - so könnte man doch mit einer Aktion vom Typ "Tag-Feld formatieren" JOIN füllen.
und für den nächsten String nimmt man dann %join%\\$regexp()
Ist das der Weg?

Ich glaub(t)e das soweit verstanden zu haben.

In dem Fall ist es nach der MB-Doku so, das die join-Phrasen jeden Wert einnehmen können, den die Produzenten vorgeben, solange er nicht leer ist (also auch ein Leerzeichen).
Schlichtweg muss man sich darauf verlassen, bzw. getreu dem Motto Vertrauen ist gut, …
Es kann zwar maximaler Unsinn eingeben werden, der jedoch durch ein internes QS verifiziert wird. (Bin anfangs da schon manchmal durchs Raster gefallen).

Daraus folgt, das die Werte zwischen den ARTISTS jeden "verifizierten" Wert einnehmen (können).

Die Werte können jeden beliebigen String annehmen. Aus Gründen der Lesbarkeit sollten jedoch im String das erste und der letzte Zeichen ein Leerzeichen sein, muss aber nicht. I.d.R. ist das so, Default ist ' & '.

Zusammenfassend liegt mein Problem darin, die einzelnen Werte in ARTIST mittels ARTISTS aufzuteilen und dem/n neuen TAG/s zuzuordnen.

Dann zeig doch mal den echten Inhalt aus dem Dialog "Erweiterte Tags" von ARTIST und ARTISTS vor und nach der Bearbeitung (per Hand).
Denn die bisher gezeigten Beispiele von ARTISTS sind ja eher so:
ersetze das erste Semikolon durch "and", das zweite durch "with" oder alle (Default) durch "&".

Werde ich tun.
Melde mich morgen mit detailierten Beispielen

bkh

Mit der Aktion Tag-Felder importieren und der RegEx-Funktion

$regexp(%artist%,(.)( feat. | & | vs. | with | pres. | duet with | duet |, )(.)( feat. | & | vs. | with | pres. | duet with | duet |, )(.)( feat. | & | vs. | with | pres. | duet with | duet |, )(.),$1\\$3\\$5\\$7 +++ $char(32)$2$char(32)\\$char(32)$4\\$char(32)$6$char(32))

ist es mir gelungen die einzelnen Werte zu trennen und den Tags zuzuordnen.

Soweit so gut.

Nach der Aktion Tag-Feld aufteilen "\" werden jedoch die Leerzeichen am Anfang und Ende des Strings entfernt.
In dem Ziel-String zum Formatieren für Dateinamen jedoch würden diese benötigt.
Aber dafür werde ich auch noch eine Lösung finden.

Eine Frage habe ich noch:
Gibt es eine Möglichkeit, das oben angegebene Funktion auch für ARTISTS mit nur 2 oder 3 Interpreten und entsprechenden JOIN PHRASES funktioniert?

Um die JOIN-Phrases in der vorgefundenen Reihenfolge in ein multivalue-Feld JOIN zu kriegen, kannst du z.B. diese Funktion anwenden:
$regexp($replace(%artist%, ,\\),\u\l*,%dummy%)
Die lässt nur noch die Bestandteile übrig, die nicht mit einem Großbuchstaben anfangen und dann mit einem Kleinbuchstaben weiter gehen.

Bei der Anwendung für $regexp($replace('David Guetta & Afrojack feat․ Charli XCX with French Montana', ,\\),\u\l*,%dummy%)
kommt raus:
\\\\&\\\\feat․\\\\\\with\\\\
Wenn du das als Format string für JOIN nimmst, ergibt dies 3 JOIN Felder in der Reihenfolge "&", "feat." und "with".
Die vielfach-Schräger-Paare, die ggf. zu einem leeren Feld führen würden, werden verworfen, das es keine leeren Felder gibt.
Anschließend entfernst du per $replace() alle join-Schlüsselwörter aus ARTIST bzw. ersetzt sie durch den Doppel-Rückwärts-Schräger \\