#!/usr/bin/perl use warnings; use strict; while () { chomp; my ($ezb, $numbers) = split(';',$_); my( $pre, $in, $post )= $numbers =~ /^(\d+(?=\()|[\d+, ]+?)(\d*\(.*\))(.*)/; print "$_:\n \$pre = '$pre\n \$in = '$in'\n \$post = '$post'\n"; } __DATA__ 201.1;201(27, 28, 3, 4, 83, 84, 890, 897, 898, 9), 2054 201.2;201(1, 20-26, 29, 80-82, 891-896, 899) 201.3;201(52-54, 6, 75, 76, 85-88) 201.4;201(50, 51, 55-59, 70-74, 77-79) 2302.1;2302, 2304(3-8, 92-99), 2305(2, 4-9) 231.1;2301, 2303, 2304(1, 2, 90, 91), 2305(1, 3), 2306, 2307, 2308