How to copy part of existing tag to another field?

I've been pulling my hair out trying to create an action that will copy everything after a certain phrase to a new tag, and delete it from the original one after it's finished copying it.

Basically, I've got a shit ton of tracks with "Artist Feat/ft/featuring LISTOFARTISTSHERE", and I want to keep %Artist% in the artist tag, and move everything after (but NOT including) ft/feat/featuring to %composers%.

Here are a few different semi=related scripts that I tried editing to make work, and for some reason they just completely delete the artist field, and don't even copy the feat to %composers% :frowning:

1: %artist% & $mid(%composer%,$add($strstr(%composer%,'Featuring.'),6),$len(%composer%))

2: Guess Value, Source Format: %artist% Guessing Pattern: feat. %composer%

The complete guessing pattern should be
%artist% feat. %composer%

The "feat." serves as separator. please note that it is important whether it is written in capitals or not.
So what you could do: create an action group that first unifies the "ft/feat./featuring" with a simple replace and then do the guessing.

Action: Import tag fields (guess values) Source format: %ARTIST% Format string: %ARTIST% Ft %COMPOSER% Format string: %ARTIST% Feat %COMPOSER% Format string: %ARTIST% Featuring %COMPOSER%
       <!--coloro:#000000--><span style="color:#000000"><!--/coloro-->... and so on with all variations and abbreviations of "featuring"<!--colorc--></span><!--/colorc-->
... or ... 1. Action: Format tag field. COMPOSER <== $cutLeft(%ARTIST%,$add($sub($strstr(%ARTIST%,' featuring '),1),$len(' featuring '))) 2. Action: Format tag field. ARTIST <== $left(%ARTIST%,$sub($strstr(%ARTIST%,' featuring '),1)) ... or ... 1. Action: Format tag field. COMPOSER <== $regexp(%ARTIST%,'^(.+?)\s+[[({<]?(?:ft\.?|feat\.?|featuring)\s+(.+?)[])}>]?\s*$','$2',1) 2. Action: Format tag field. ARTIST <== $regexp(%ARTIST%,'^(.+?)\s+[[({<]?(?:ft\.?|feat\.?|featuring)\s+(.+?)[])}>]?\s*$','$1',1)
Example results

ARTIST_FEAT <== $regexp(%ARTIST%,'^(.+?)\s+[[({<]?(?:ft\.?|feat\.?|featuring)\s+(.+?)[])}>]?\s*$','$2',1)

ARTIST      <== $regexp(%ARTIST%,'^(.+?)\s+[[({<]?(?:ft\.?|feat\.?|featuring)\s+(.+?)[])}>]?\s*$','$1',1)
-------------------------------------------------------------------------------------------------------
                                       Result $2             Result $1

%ARTIST% - - - - - - - - - - - - - ==> %ARTIST_FEAT%     ==> %ARTIST%

main artist ft other artist            other artist          main artist
main artist ft. other artist           other artist          main artist
main artist feat other artist          other artist          main artist
main artist feat. other artist         other artist          main artist
main artist featuring other artist     other artist          main artist

main artist FT other artist            other artist          main artist
main artist FT. other artist           other artist          main artist
main artist FEAT other artist          other artist          main artist
main artist FEAT. other artist         other artist          main artist
main artist FEATURING other artist     other artist          main artist

main artist Ft other artist            other artist          main artist
main artist Ft. other artist           other artist          main artist
main artist Feat other artist          other artist          main artist
main artist Feat. other artist         other artist          main artist
main artist Featuring other artist     other artist          main artist

main artist [ft. other artist]         other artist          main artist
main artist (ft. other artist)         other artist          main artist
main artist {ft. other artist}         other artist          main artist
main artist <ft. other artist>         other artist          main artist
================================================================================

DD.20140113.1520.CET
DD.20140114.1633.CET

I had trouble with the regular expressions, but I was able to build off Ohrenkino's post, and get it to work.

my only problem is that I just discovered a few songs that are encapsulated in parentheses, and it COMPLETELY breaks the action, any fix? (I do plan on adding an action that will clean up any invisible chars like space to have only one of them and so on, if there's any interest in my exact tag I'll add it when it's finished.)

ALSO: it completely replaces the %composer% tag with the contents of the artist tag, is there any way to make it merely append it to the composer tag?

btw, here's my current action group:
[#0]
T=2
F=_TAG
1=Featuring.
2=Featuring:
3=1|1

[#1]
T=2
F=_TAG
1=featuring.
2=Featuring:
3=1|1

[#2]
T=2
F=_TAG
1=Featuring
2=Featuring:
3=1|1

[#3]
T=2
F=_TAG
1=featuring
2=Featuring:
3=1|1

[#4]
T=2
F=_TAG
1=Feat.
2=Featuring:
3=1|1

[#5]
T=2
F=_TAG
1=feat.
2=Featuring:
3=1|1

[#6]
T=2
F=_TAG
1=feat
2=Featuring:
3=1|1

[#7]
T=2
F=_TAG
1=Feat
2=Featuring:
3=1|1

[#8]
T=2
F=_TAG
1=Ft.
2=Featuring:
3=1|1

[#9]
T=2
F=_TAG
1=ft.
2=Featuring:
3=1|1

[#10]
T=2
F=_TAG
1=Ft
2=Featuring:
3=1|1

[#11]
T=2
F=_TAG
1=ft
2=Featuring:
3=1|1

[#12]
T=7
F=%artist%
1=%artist% Featuring: %composer%

[#13]
T=2
F=COMPOSER
1= &
2=,
3=0|0

Don't worry, be happy that you have found something useful in the Mp3tag toolbox for your work.

If such happens, then the regular expression has not been successfully applied and the output result is the unchanged input.
If already existing data from within the target tag-field should not be overwritten, then it will be a good idea to save an intermediate result into a temporary helper tag-field, at least while testing time.
In the following step you can combine the content from both tag-fields into the target tag-field, then remove the helper tag-field, e. g. ...
Format tag-field:
COMPOSER <== %COMPOSER% %TEMP_DATA%
... or ...
COMPOSER <== %TEMP_DATA% %COMPOSER%

DD.20140114.1700.CET