$ perl -E ' my $re = qr{(?\w+)(?(?:\s*\d+\s*)*)}; my $str = "a 1 2 3 b 4 5 6"; while ($str =~ /$re/g) { say "$&: $+{letter} $+{digit}"; } ' a 1 2 3 : a 1 2 3 b 4 5 6: b 4 5 6