Is my interpretation correct?
The first () matches one or more non-dot characters and the second () matches the trailing . or nothing at the end of the string.
Then you build a string that has at least two leading zeros and extract the rightmost 2 characters and tag on the trailing . or nothing.
I quite like this solution as well. Both you and davorg have come up with good alternatives, thanks. I should think about using substr more - unfortunately it sits in my mind sharing a location with peek and poke! and so doesn't come out to play much these days.
Update: In fact I don't see any reason for the second bracketed expression in the regex. Also I can't see how it expands the first hex number if that's necessary. Is this better? or have I missed something subtle?