Разделить строку на кусок равной длины в Perl - PullRequest
4 голосов
/ 25 ноября 2011

Допустим, у меня есть строка длины, кратная 3.

my $seq = "CTTCGAATT"; # in this case length of 9

Есть ли способ, которым я могу разделить его на равную длину 3? Такой, что в итоге у меня есть этот массив:

$VAR = ["CTT", "CGA", "ATT"];

Ответы [ 4 ]

14 голосов
/ 25 ноября 2011

Взгляните на решение в Как я могу разбить строку на куски по два символа в Perl?

Особенно unpack может быть интересным:

my @codons = unpack("(A3)*", $seq);
3 голосов
/ 25 ноября 2011

Выполните итерации по кратным трем, используя substr, чтобы получить кусочки push в списке.

2 голосов
/ 25 ноября 2011
my $str = join '', map { ('A','T','C','G')[ rand 4 ] } 0 .. 900 ; # Random string

my @codons = $str =~ /[ACTG]{3}/g;   # Process in chunks of three
                                     # '/g' flag necessary

print 'Size of @codons array : ',
        scalar @codons;              # '300'
1 голос
/ 30 октября 2018

my $str='ABCDEFGHIJKLM';

мы можем использовать совпадение строк, чтобы получить части из строки, где минимальная длина равна 1, а максимальная - требуемая длина, 3 или 4 или что-то еще

@parts = $str =~ /(.{1,4})/g;и мы получаем @parts = ['ABCD', 'EFGH', 'IJKL', 'M']

...