Well, this monstrosity fits my needs:
listcombine(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex(if(isequal(regex([performer (no guests)],/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),/#^(([^\(]+)\([^\)]+\)+(.*)|(.*))#/,-1)[R1][R2][R3],(,8),[R2][R3],[R1]),)
Matt, any chance of updating the Regex engine to support global lookups that auto-populate the [Rn] saves?