Moving "feat." from title to artist

Got it now!
Have 2 more actions I am struggling with.

  1. Need two swap between 2 artists.
    Artist 1, Artist 2 -> Artist 2 Feat. Artist 1
  2. Artist 1 - Title (Feat. Artist 2) -> Artist 1 Feat. Artist 2 - Title

Possible?

Try
Format value for ARTIST
Format string: $regexp(%artist%,'(.*), (.*)', $2 Feat. $1)

$regexp(%field%,(.*) - (.*) \(Feat. (.*)\),$1 Feat. $3 - $2)

The first one worked perfectly, the second one just wipes the artist field if I assign it to ARTIST, ot the title field if to TITLE. I must be doing something wrong.

If you think you do something wrong, then it would be best to show a screendump of the action and the data.

You can test regular expression in format strings with Convert>Tag-Tag and the preview there

Ha! Just learned something new!
Anyway, here is the test

That is the problem of not really exact descriptions and simple copying and pasting.

The %field% has to be filled by you with the correct name of the field variable. You mentioned the ARTIST for the first case but no field for the second case - and as that has the title in it, it could have been anything, even the filename.

%field% does not contain any data, of course, therefore you search an empty string with a regular expression and if there is no match, then the original string is the result. And as this string was empty it erases the field contents.

Just checked the original data - and that shows that if you have "Utopia (Feat. Janelle Kroll)" in TITLE then this does not match the pattern

and the action will return the original title

LOL, I am a smart idiot....
That was it:
$regexp(%artist% - %title%,(.*) - (.*) \(Feat. (.*)\),$1 Feat. $3 - $2)

Actually, I stand corrected....I feel stupid again. It wrote everything in the title. I am lost at what to do now.

What does the title look like now?

image
It now correctly undersands the placement of the futured artist but it writes the title to the artist field, and leaves the title unchanged.

So now you have as ARTIST
"Moon Boots Feat. Janelle Kroll - Utopia Feat. Janelle Kroll - Utopia"?
Why is there a second "- Utopia"?

Couldn't you show the real contents of the fields ARTIST and TITLE, please?

Apologies, I forgot I was applying the expression after already applying it once.

So, the artist should be Moon Boots Feat. Janelle Kroll and the title should be Utopia.

After applying this i get:
Artist: Moon Boots Feat. Janelle Kroll - Utopia
Title: Utopia (Feat. Janelle Kroll)

OK, so different approach:
As apparently the regular expression is working I ask you now to copy that expression as it is and create a new action of the type "Guess value" (to import tag fields)
Source:
(paste the regular expression as source)
Target format string: %artist% - %title%

Worked beautifully! There are some combinations that are outside of the original expression due to really messed up tags but I can deal with them by creating additional actions based on what you've given me. Never used Guess Values before. Learned a lot of new stuff!

Guess values is especially useful when you know the tag info exists but has been combined into a single field, like in your example. It can be used to extract as many tags as you can identify if they are separated by any kind of identifiable character.

Well, the following did not work....
Artist: Ferry Tayle
Title: Memory Of Me (Feat. Hannah Ray) (Club Mix)
After applying the regular expresson I get this:
Artist: Ferry Tayle Feat. Hannah Ray) (Club Mix
Title: Memory Of Me
What I expect:
Artist: Ferry Tale Feat. Hannah Ray
TItle: Memory Of Me (Club Mix)
Basically what I need is this:
any combination of ft, feat, ft., feat., featuring with or without a leading open bracket that could be either { or ( to be converted to Feat.
Then it should move anything starting with Feat. up to the first encountered open bracket or the end of the line if no open bracket is found into the Artist field.
Unfortunately I do not understand how exactly this expression works and what its syntax means. Otherwise, I could probably figure it out myself.

... has 2 opening and closing brackets. And due to the greadiness of regular expressions, everything starting with the 1st opening bracket and ending with the last closing bracket is taken as $3.

So, a variation of the regular expression would be:
$regexp(%artist% == %title%,(.*) == (.*) \(Feat\. (.*?)\) (.*?), $1 Feat. $3 == $2 $4)
The target patter would be: %artist% == %title%

Worked great! Had to combine these 2 expressions under the same action. Also added an expression to remove the leading spaces that got created for some reason. Also added the replacements for all variations of the featured artist I could think of. Couldn't figure out the expression but the replacement actions are doing what I need. I am going to share my action file in a case if someone can improve it or just use it for their own tagging purposes. There are only 2 more modifications I need (again, my lack of understanding the scripting language gets in the way):
when the song is Temple One - Autumn Leaves (Feat. Hannah Ray (Club Mix)
Expected action: Temple One Feat. Hannah Ray - Autumn Leaves (Club Mix)
Temple One - Autumn Leaves (Feat. Hannah Ray
Expected action:
Temple One Feat. Hannah Ray - Autumn Leaves

Here is the content of my MTA file that works now exactly like I need (minus 2 expressions for the above)

[#0]
T=2
F=_ALL
1= /
2=) (
3=0|0

[#1]
T=2
F=_ALL
1=featuring
2=Feat
3=0|0

[#2]
T=2
F=_ALL
1=Featuring
2=Feat
3=0|0

[#3]
T=2
F=ARTIST
1= feat.
2= Feat.
3=0|0

[#4]
T=2
F=ARTIST
1= feat
2=Feat.
3=0|0

[#5]
T=2
F=TITLE
1=(feat.
2=(Feat.
3=0|0

[#6]
T=2
F=TITLE
1=(feat
2=(Feat.
3=0|0

[#7]
T=2
F=ARTIST
1=(feat
2=Feat.
3=0|0

[#8]
T=2
F=ARTIST
1=(feat.
2=Feat.
3=0|0

[#9]
T=2
F=TITLE
1= feat
2= (Feat.
3=0|0

[#10]
T=2
F=TITLE
1= feat.
2= (Feat.
3=0|0

[#11]
T=2
F=ARTIST
1= ft.
2= Feat.
3=0|0

[#12]
T=2
F=ARTIST
1= (ft.
2= Feat.
3=0|0

[#13]
T=2
F=ARTIST
1= ft
2= Feat.
3=0|0

[#14]
T=2
F=TITLE
1= ft
2= (Feat.
3=0|0

[#15]
T=2
F=TITLE
1= ft.
2= (Feat.
3=0|0

[#16]
T=2
F=ARTIST
1= (ft
2= Feat.
3=0|0

[#17]
T=2
F=TITLE
1=(ft
2=(Feat.
3=0|0

[#18]
T=2
F=TITLE
1=(ft.
2=(Feat.
3=0|0

[#19]
T=7
F=$regexp(%artist% \u003d\u003d %title%,(.) \u003d\u003d (.) \(Feat\. (.?)\) (.?), $1 Feat. $3 \u003d\u003d $2 $4)
1=%artist% \u003d\u003d %title%

[#20]
T=7
F=$regexp(%artist% - %title%,(.) - (.) \(Feat. (.*)\),$1 Feat. $3 - $2)
1=%artist% - %title%

[#21]
T=4
F=ARTIST
1=^[\s]+|[\s]+$
2=
3=0

Does this mean that you are missing a closing bracket?
Then I would add that before the other actions start.
$regexp(%title%,'(.*) \((.*) \((.*)','$1 ($2) ($3')

And I would filter for such files first.
Or you add another action that replaces "))" with ")".