How to replace certain signs but leave them when there are in brackets?

I need to replace signs : , - and , with sign ; in all of my TITLEs

But the problem is that some of the TITLEs have parts of it content put inside brackets and on top of that sometimes that content in brackets has the - sign among it that needs to stay there. In other words, [ marks the start while ] marks the end of the areas where a Replace action should not be applied at all. And to make things even more complicated, if - happens to be outside of a bracket area but serves as a hyphen [i.e. without pauses before and after it] it needs to stay as - [i.e. still without pauses] and not turn into ;. And any other special signs have to be ignored and cannot interfere with the process


So for example:

Symphony #3 (Symphony Of Sorrowful Songs), Opus #36, Movement #1: Lento - Sostenuto Tranquillo Ma Cantabile ^1 [BM1]

has to become

Symphony #3 (Symphony Of Sorrowful Songs); Opus #36; Movement #1; Lento; Sostenuto Tranquillo Ma Cantabile ^1 [BM1]


Symphony #3 (Symphony Of Sorrowful-Songs), Opus #36, Movement #2: Lento - Tranquillissimo ^1 [M1]

has to become

Symphony #3 (Symphony Of Sorrowful-Songs); Opus #36; Movement #2; Lento; Tranquillissimo ^1 [M1]


Symphony #3 (Symphony Of Sorrowful--Songs), Opus #36, Movement #3: Lento - Cantabile-Semplice ^2 {Mix-Original} [M1-2E]

has to become

Symphony #3 (Symphony Of Sorrowful--Songs); Opus #36; Movement #3; Lento; Cantabile-Semplice ^2 {Mix-Original} [M1-2E]



So how would such complicated action look like?

It should be fairly easy to replace ), with ); - that's a simple replace of string constants.
Also it should be easy to replace the ; with " - " after you have replaced the ones following a brackt.

Why do you have sometimes 2 hyphens for the same separation?

vs.

So I would suggest that you filter for each occurance of a string or string pattern first and check if you really got the ons that you want and then apply a suitable action with a similar pattern.

I do not trust these copied/constructed examples. So it would either be better to se and actual example or for you to test the search expression with the filter function.

There are copy-pasted but modeled after real occurrences. It's just than I would have to past in something like at least dozens of real and completely different TITLEs which would be hard to read and figure out what the rules of my naming system are. I simply took the approach of coming up with every possible variations - and squeezing them into just 3 life-like examples. I also took into considerations false-positives or whatever they should be called [hence e.g. the -- issue]

But even if what I am after is possible - after executing it I will manually compare new and old TITLEs, just to be sure I did not mess something up by forgetting about special cases or by not foreseeing possible overlapping of rules [or whatever they should be called]

And?
Did you try the first 2 suggestions?
Then, are further variations left?

I will in a near future as I plan to do this change to all my files after I ready them for burning a backup of them on Blu-ray

I will report back then