Getting there. Thanks for the hints
(setq res (cl-ppcre:register-groups-bind (first second ) ("^Topics messages ([0-9]+) through ([0-9]+)" "Topics messages 1 through 99" :sharedp t) (list first second ) ))
(if res (msg(concatenate 'string "<message st="" (car res) "" end="" (cadr res) ""/>")) )
That gives me what I wanted. Now returns the marked up parse of the string or nil.
I can work with that!
Much appreciated.