This is a variation of
and many other samples throughout the forum.
The answer can be simple to complex depending on how how flexible you want it to be and how accurately your example represents the range of file names you want to rename.
For example, the sample you gave
Artist Name - Label Name - Track Name (Remix name)
shows a single space on both sides of each dash and a space before the opening parenthesis.
If this is always the case you could match it with:(.+) - (.+) - (.+) \((.+)\)
and replace with\1 - \3 - \4 - \2
However, if even one space is missing it will not match.
If you weren't sure of the number of spaces, you could use match with:(.+)-(.+)-(.+)\((.+)\)
and replace with \1 - \3 - \4 - \2
depending on whether you wanted at least one space on each side of the hyphen in the renamed file name.
This would be more flexible but you could end up with a variable number of spaces around the hyphens and before the parenthesis.
If that isn't a problem you could use that.
Another problem with this type of regex (using .+ to get a match) is that in this case there is a huge amount of backtracking to get a match of a single file name. The first one above takes about 340 steps
, the second about 314 steps
. This could be significant if you are naming thousands of files. A better regex would be:([^-]+) - ([^-]+) - ([^(]+) \(([^)]+)\)
, again depending on whether you are sure of the spaces around the hyphens etc.
These do not backtrack and the first will match in 12 steps!
Finally, if you wanted to be able to match variable spacing and were fussy that the replacement would have exactly the right number of spaces you could use:([^-]+\w)\s*-\s*([^-]+\w)\s*-\s*([^(]+\w)\s*\(([^)]+)\)
and replace with:\1 - \3 - \4 - \2
This captures no surrounding spaces and allows for a varying number of spaces, and does it in about 32 steps.