#!/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 #### 201.1;201(27, 28, 3, 4, 83, 84, 890, 897, 898, 9), 2054: $pre = '201 $in = '(27, 28, 3, 4, 83, 84, 890, 897, 898, 9)' $post = ', 2054' 201.2;201(1, 20-26, 29, 80-82, 891-896, 899): $pre = '201 $in = '(1, 20-26, 29, 80-82, 891-896, 899)' $post = '' 201.3;201(52-54, 6, 75, 76, 85-88): $pre = '201 $in = '(52-54, 6, 75, 76, 85-88)' $post = '' 201.4;201(50, 51, 55-59, 70-74, 77-79): $pre = '201 $in = '(50, 51, 55-59, 70-74, 77-79)' $post = '' 2302.1;2302, 2304(3-8, 92-99), 2305(2, 4-9): $pre = '2302, $in = '2304(3-8, 92-99), 2305(2, 4-9)' $post = '' 231.1;2301, 2303, 2304(1, 2, 90, 91), 2305(1, 3), 2306, 2307, 2308: $pre = '2301, 2303, $in = '2304(1, 2, 90, 91), 2305(1, 3)' $post = ', 2306, 2307, 2308'