我有一个Perl脚本,用Ts替换字符串末尾的任何Us或Ns。我正在尝试这个程序:
use strict;
my $v = "UUUUUCCNNCCCCNNNCUUUNNNNN";
printf("before: %s \n", $v);
if($v =~ m/([UN]+)$/)
{
my $length = length($1);
substr($v, (length($v) - $length), $length) = "T" x $length;
}
printf(" after: %s \n", $v);
它产生这个输出:
> ./test
before: UUUUUCCNNCCCCNNNCUUUNNNNN
after: UUUUUCCNNCCCCNNNCTTTTTTTT
有没有办法用单个正则表达式,翻译或其他命令执行此操作?
答案 0 :(得分:8)
$v =~ s/([UN]+)$/'T' x length($1)/e;
/e
修饰符指示Perl将替换子句'T' x length($1)
视为要计算的表达式,并将评估结果用作替换字符串。
答案 1 :(得分:4)
为了TIMTOWTDI:
$v =~ s/[UN](?=[UN]*$)/T/g;