I'm getting somewhere with the separation of the substring.
$puts(TRACK,0012a3)
$right($replace($get(TRACK),$num($get(TRACK),),),$sub($strstr($get(TRACK),$num($get(TRACK),)),1))
$right($replace(%track number%,$num(%track number%,),),$sub($strstr(%track number%,$num(%track number%,)),1))
Good for a number of cases, but breaking for weirder fields like some I just found ("x9-08"), which I'll probably just try to reformat manually when I find them... or I could try to make something even more convoluted to try to automate.
UPDATE: Nevermind, it's breaking for some reason...
UPDATE2: Working now
$puts(TRACK,0000012-a3)
$substr($replace($get(TRACK),$num($get(TRACK),),),$sub($strstr($get(TRACK),$num($get(TRACK),)),),$len($replace($get(TRACK),$num($get(TRACK),),)))
In the end, trying to cover all possible crazy schemes out there seems more of a task for a learning IA than for even an experienced coder, which I'm a million miles from being anyway.
-------------------
$pad($substr($replace(%track number%,$num(%track number%,),),$sub($strstr(%track number%,$num(%track number%,)),),$len($replace(%track number%,$num(%track number%,),))),3)
With 3char padding, ready to add at the end of the normal tracknumber string.