changing only (???? MIX) to [???? MIX]

I would like to change the title from: this is the (song) (freebird mi to this is the (song) [freebird mix].
The 'freebird mix' is just an example.. that portion changes. IE: could be (cold mix) or (dance mix).
I have tried many things but have not come up with any thing that works..
Also the same would apply for EDIT, REMIX as the end of the title such a mix in the example.
Thanks

It would have been interesting to read what you have tried because then it might be easier to find the modification.

It is not quite clear to me what you have in the TITLE:
Is it really "This is the (song) (freebird mi"?
It is really "mi" with an added zero at the end?

To modify a three-part string, try an action of the type "Replace with regular expression) for TITLE
Search string: (.) ((.)) ((.*)0
(if the zero is at the end - otherwhise it is ) )
Replace string: $1 $2 '['$3']'

No that should not be a 0. This is the (song) (freebird mix). Not sure why that converted to a 0. sorry for the confusion.

OK, so the basic statement stays the same:

To modify a three-part string, try an action of the type "Replace with regular expression) for TITLE
Search string: (.) ((.)) ((.*))

Replace string: $1 $2 '['$3']'

The "three-part string" means: characters in front of a first part of parenthesis "this is the", the part with the parenthesis "(song)" and the third in parenthesis "(some mix)" where the brackets should be replaced.

So will it still work on: this is the song (special mix)
the goal is to be able to tell an EDIT, MIX REMIX or what ever other name could be used for mix in []
as compared to () which are actual part of the song title, that is my goal. And thank you your exp. have been very helpful.

No. As that has only 2 parts: one outside the brackets, the other within.
In fact, for that you do not need an action of the type "Replace with regular expression" but just 2 actions of plain replace, als you replace one string constant - opening and closing round brackets - with another one - the square ones:
First Action of that action group:
Replace for TITLE
Search string: (
Replace string: [
second action:
Replace for TITLE
Search string: )
Replace string: ]

I think some thing is missing.. in my explanation of what I would like to have happen..

So let me step back...

I would like to update all (100,000) of my dance songs.

They are normally named:

ABC (fred mix)
abc (dave mix)

but some are named

this (song) (George mix)
that (song) (george mix)
that (song) (Tom mix)
that (song) (Tom Edit)
that (song) (tom remix)

while others say:

the song (remix version)
the song (fred linda mix)
the song (mix of fred linda)

So I want to run this against my complete folder each week as I download new music that doesn't fit my standard.

I might even be able to use your examples to do the job but have been working on this for several days now.
Hope this is making sense as I am extremely tired after having several issues with hard drives and
completers crashing over the last few days and having to re-download a ton of songs. Thanks again!

The problem is that you have 2 patterns. And they have to be treated separately.

So I would suggest that you use filters.
To get the ones with 2 pairs of parenthesis:
%title% HAS ") ("

Modify this set then with the regular expression action.

To get those with just one pair:
%title% HAS ")" AND NOT %title% HAS ") ["

I am not sure if running such an action on 100,000 tracks is a really good idea as you will most likely have tracks like

Pigs (three different ones)
or if Pink FLoyd is not really for dancing:
Exhale (Shoop Shoop) - Whithey Houston
Movin' Out (Anthony's Song) - Billy Joel

so that no
Mix, Dub, Version, Edit
etc. appears in the brackets.
You then would have to filter for these keywords anyway and check your collection.

Filter: TITLE MATCHES "^.+\(.*(mix|edit).*\)$" Action "Format value" Field ......: TITLE Formatstring: $regexp(%TITLE%,'^(.+)\((.*(?:mix|edit).*)\)$','$1[$2]',1) Testcases: "Think (feat. CN) (JM vs CV Remix)" -> "Think (feat. CN) [JM vs CV Remix]" "(EDIT) name of song (name of mix)" -> "(EDIT) name of song [name of mix]" "anywhere_but_here_(radio_edit)" -> "anywhere_but_here_[radio_edit]" "song title (name of mix)" -> "song title [name of mix]" "Go Around (Vocal Remix Edit)" -> "Go Around [Vocal Remix Edit]"

DD.20150907.1015.CEST

Perfect, exactly what I was looking for. I had come back to say I added the word 'mix' to the end of the command but your version is coded much better! Thank you

What does the ,1 do on the end?

From the Mp3tag manual, scripting functions, ...
"$regexp(x,expr,repl) replaces the pattern specified by the regular expression expr in the string x by repl. The fourth optional parameter enables ignore case (1) or disables the ignore case setting (0).
Please note that you have to escape comma and other special characters in expr."

DD.20150908.0915.CEST