如何在Perl中的字符串末尾替换字符?

时间:2010-10-01 17:38:56

标签: regex perl replace

我有一个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

有没有办法用单个正则表达式,翻译或其他命令执行此操作?

2 个答案:

答案 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;