def ignoreTrailing = true def fields = [ [ 'field1', 3 ], [ 'field2', 5 ], [ 'field3', 7 ], ] def x = '12345678901234567890' def pattern = fields.collect { name, size -> "(?<${name}>.{${size}})" }.join() + (ignoreTrailing ? '.*' : '') def matcher = x =~ pattern if (matcher.matches()) { println println matcher.group('field1') println matcher.group('field1') println matcher.group('field1') }