Format Value of multiple tags

I am trying to create a new tag PERFORMERINST from existing tags PERFORMER and INSTRUMENT. The existing tags may have multiple values (separated by semi-colons). I want PERFORMERINST to look like "Performer1 (Instrument1); Performer2 (Instrument2); etc".
I can do this for two performers by first creating PERFORMERINST as "Performer1; Performer2 (Instrument1; Instrument2)" using a Format Value action, then applying the reg exp:
([^;]);\s?([^;])\s?(([^;]);\s?([^;]))$
replacing values with:
$1 ($3); $2 ($4)

I can't see a way of doing it with an indeterminate number of performers. If I split the fields and then use Format Value, it only operates on the first instance of each tag. Replace with Reg Exp works on all instances of multiple tag values, but can't reference other tags. I've tried $meta_sep as well, but with no luck.
Any ideas?

There is a multi-value tag-field ...
PERFORMER (mv) == Performer1\\Performer2\\Performer3\\Performer4

There is a multi-value tag-field ...
INSTRUMENT (mv) == Instrument1\\Instrument2\\Instrument3\\Instrument4

Use an action "Format value" to set the multi-value tag-field ...
PERFORMERINST <== (... write following text as one line to be the Formatstring ...)
$meta(PERFORMER,0)' ('$meta(INSTRUMENT,0)')\\'
$meta(PERFORMER,1)' ('$meta(INSTRUMENT,1)')\\'
$meta(PERFORMER,2)' ('$meta(INSTRUMENT,2)')\\'
$meta(PERFORMER,3)' ('$meta(INSTRUMENT,3)')\\'

... or a little bit more comfortable ... without trailing "empty items" ...

$trimRight($meta(PERFORMER,0)' ('$meta(INSTRUMENT,0)')\\\\'$meta(PERFORMER,1)' ('$meta(INSTRUMENT,1)')\\\\'$meta(PERFORMER,2)' ('$meta(INSTRUMENT,2)')\\\\'$meta(PERFORMER,3)' ('$meta(INSTRUMENT,3)')\\\\'$meta(PERFORMER,4)' ('$meta(INSTRUMENT,4)')\\\\'$meta(PERFORMER,5)' ('$meta(INSTRUMENT,5)')\\\\'$meta(PERFORMER,6)' ('$meta(INSTRUMENT,6)')\\\\'$meta(PERFORMER,7)' ('$meta(INSTRUMENT,7)')\\\\'$meta(PERFORMER,8)' ('$meta(INSTRUMENT,8)')\\\\'$meta(PERFORMER,9)' ('$meta(INSTRUMENT,9)')\\\\',' ()\')')'

The result will be a multi-value tag-field ...
PERFORMERINST (mv) == Performer1 (Instrument1)\\Performer2 (Instrument2)\\Performer3 (Instrument3)\\Performer4 (Instrument4)

DD.20141211.1800.CET, DD.20141211.2006.CET

Thank you very much. That works a treat! There is still the (rather academic) question as to whether it is possible to handle indeterminately large numbers of values, but I think 10 should handle all my classical music (and even work for Jazz fans) and it is easy enough to add more if needed.