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