Convert multi-tag field (RegEx?)

The following expression
"Vera Fischer - Flute\\Evan Markus Hulbert - Double Bass\\Markus von Deuter - Oboe"
should be converted to
"Fischer, Vera - Flute\\Hulbert, Evan Markus - Double Bass\\von Deuter, Markus - Oboe"
So far I work with:
$replace($trim($regexp($meta_sep(soloists,; ); ,'(.*?) (.*?) - (.*?); ','$2, $1 - $3; ')),; ,\\,;,)
The first "Vera Fischer" (first name and surname) works without any problems. The second case is output incorrectly. In the third case, it only works in this form. As soon as a second first name is added or "de la" is used instead of "von", for example, it does not work.
My research has been unsuccessful so far.
Does anyone have any ideas?

You can detect the last word (the "name") in a string and change the part in your regular expression from
'(.*?) (.*?) - (.*?); '
'(.*?) (\w+) - (.*); '


but I don't see how you can reliable automate the detection of "von" or "de la" or "auf der" or "von der" and many other "nobiliary particle" as prefix of the name and therefore set it in front of the last word.

Thanks for the quick reply. But it does not change the result. Incorrect: Markus Hulbert, Evan.
Correct would be: Hulbert, Evan Markus.

If I try it with Convert Tag -> Tag (to see an immediate preview)
and this slightly adapted part:
'(.*?) (\w+) - (.*?); '
I get this:

The first and second entry seems to be correct.
The third entry can't be transformed automatically, as I explained above.

Thank you very much! I have found my mistake.