perl -wle' my %neg = ( O => "I", I => "O" ); $_ = "III...MMMMMOOOO....MMMIIII"; print; s/([IO])(M+)(\.+)/ $1.$2.( $neg{$1} x length($3) ) /eg; s/(\.+)(?=M+([IO]))/ $neg{$2} x length($1) /eg; print; '