【问题标题】:Split a String into Equal Length Chunk in Perl在 Perl 中将字符串拆分为等长的块
【发布时间】:2012-01-06 03:07:18
【问题描述】:

假设我的字符串长度是 3 的倍数。

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

有没有办法可以把它分成等长的 3? 这样最后我就有了这个数组:

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

【问题讨论】:

  • 交叉发布到 Perlmonks。在那里,提供了三种解决方案,基准证明解包方法是一个不错的选择。 perlmonks.org/?node_id=939987

标签: perl split


【解决方案1】:

How can I split a string into chunks of two characters each in Perl?查看解决方案

尤其是unpack 可能会很有趣:

my @codons = unpack("(A3)*", $seq);

【讨论】:

    【解决方案2】:

    迭代三的倍数,使用substrpush 的片段放入列表中。

    【讨论】:

    • 谢谢。在实践中,我有大约 1000 万根这样的字符串要断开。 Substr 可能太慢了?
    • 试试看。如果速度很慢,则逐个字符地读取文件,直到填充缓冲区,然后将其推入列表中。重复直到 EOF。
    【解决方案3】:
    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'
    

    【讨论】:

      【解决方案4】:

      my $str='ABCDEFGHIJKLM';

      我们可以使用字符串匹配从字符串中获取部分,其中最小长度为 1,最大值为所需长度,3 或 4 或其他任何值

      @parts = $str =~ /(.{1,4})/g; 我们得到@parts = ['ABCD', 'EFGH', 'IJKL', 'M']

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-04-15
        • 1970-01-01
        • 2011-04-11
        • 1970-01-01
        • 2021-08-11
        • 2010-09-27
        相关资源
        最近更新 更多