Как я могу заменить символы только в конце строки в Perl? - PullRequest
1 голос
/ 01 октября 2010

У меня есть Perl-скрипт, который заменяет любые Us или Ns в конце строки на Ts. Эта программа - то, что я пытаюсь:

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 ]

8 голосов
/ 01 октября 2010

    $v =~ s/([UN]+)$/'T' x length($1)/e;

Модификатор /e инструктирует Perl обрабатывать предложение замены 'T' x length($1) как выражение для оценки и использовать результат оценки в качестве строки замены.

4 голосов
/ 02 октября 2010

Ради TIMTOWTDI:

$v =~ s/[UN](?=[UN]*$)/T/g;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...