use strict; use warnings; my $s1 = '5c,5d,5Es'; my $s2 = '5c,5d,5Es'; print parse($s1)."\n"; print parse($s2)."\n"; sub parse { my $orig = shift; my ($cit, $idrefs, $values, @values); $orig =~ m/.*?>(.*)<\//; $values = $1; @values = split ',', $values; $orig =~ m/.*?"(.*)">/; $cit = $1; $idrefs .= "$cit$_ " for @values; chop $idrefs; $orig =~ s/(.*?=").*(">.*)/$1$idrefs$2/; @values = map{ s/([a-z]+)/$1<\/it>/i; $_;} @values; $values = join ',', @values; $orig =~ s/>.*?'.$values.'<'/es; return $orig; } #### 5c,5d,5Es 5c,5d,5Es