For only having one tool in my solution I am glad you can't see my run count while I sorted the regex out.
Went by identify each type of date format and adding it to the regex as and or (the pipe |) and then did the same number of steps to parse it, although had to do it as an elseif statement rather than the cleaner regex.
Thanks for your solution. I now know how to refer to marked groups in Regex formulas (e.g. $1) and went down a nice rabbit hole learning about lazy and greedy quantifiers to make sense of how the ".*?" behaved (which is much simpler than the workaround I came up with).