如何在Perl中以这种格式'gi | 216 ATGCTGTGCTGATGCTG'拆分此字符串'gi | 216ATGCTGATGCTGTG'?

时间:2012-12-15 06:40:47

标签: perl

我正在解析包含

的fasta对齐文件
gi|216CCAACGAAATGATCGCCACACAA
gi|21-GCTGGTTCAGCGACCAAAAGTAGC

我想将此字符串拆分为:

gi|216 CCAACGAAATGATCGCCACACAA
gi|21- GCTGGTTCAGCGACCAAAAGTAGC

对于第一个字符串,我使用

$aar=split("\d",$string);

但那没用。我该怎么办?

3 个答案:

答案 0 :(得分:3)

所以你要解析一些遗传数据,每一行都有一个gi|前缀,后跟一系列数字和连字符,然后是核苷酸序列?如果是这样,你可以这样做:

my ($number, $nucleotides);
if($string =~ /^gi\|([\d-]+)([ACGT]+)$/) {
    $number      = $1;
    $nucleotides = $2;
}
else {
    # Broken data?
}

假设您已经剥离了前导和尾随空格。如果你这样做,你应该为第一个获得$number = '216'$nucleotides = 'CCAACGAAATGATCGCCACACAA',为第二个获得$number = '216-'$nucleotides = 'GCTGGTTCAGCGACCAAAAGTAGC'

看起来BioPerl有一些处理fasta数据的东西,所以你可能想要使用BioPerl的工具,而不是自己动手。

答案 1 :(得分:2)

以下是我将如何做到这一点。

#!/usr/bin/perl -Tw

use strict;
use warnings;
use Data::Dumper;

while ( my $line = <DATA> ) {

    my @strings =
        grep {m{\A \S+ \z}xms}                        # no whitespace tokens
        split /\A ( \w+ \| [\d-]+ )( [ACTG]+ ) /xms,  # capture left & right
        $line;

    print Dumper( \@strings );
}

__DATA__
gi|216CCAACGAAATGATCGCCACACAA
gi|21-GCTGGTTCAGCGACCAAAAGTAGC

答案 2 :(得分:1)

如果您只是想添加一个空格(无法从您的问题中真正说出来),请使用substitution。在 ACTG 的任何分组前面放置一个空格:

$string =~ s/([ACTG]+)/ \1/;

或在任何数字和破折号分组后添加标签:

$string =~ s/([\d-]+)/\1\t/;

请注意,这将取代$string