I got it roughly working. Play around with it here:
https://regex101.com/r/rVliD2/1
I think this would be:
Code:
ships=>((\d+)th Doctor)(/| & )(.*)=>\g<4>\g<3>\g<1>
I couldn't entirely account for a third character - you can see that "Rose Tyler & Jack Harkness" is actually one capture group. I think there's ways around this (greedy regexes, maybe) but it's a bit past my knowledge.
Also, you might need to change the 'th' part to something like (rd|th) for other Doctors.