-3

我正在解析fasta对齐文件,其中包含

gi|216CCAACGAAATGATCGCCACACAA
gi|21-GCTGGTTCAGCGACCAAAAGTAGC

我想将此字符串拆分为:

gi|216 CCAACGAAATGATCGCCACACAA
gi|21- GCTGGTTCAGCGACCAAAAGTAGC

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

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

但这没有用。我应该怎么办?

4

3 回答 3

3

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

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

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

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

于 2012-12-15T07:01:00.250 回答
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
于 2012-12-15T07:04:52.690 回答
1

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

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

或在任何数字和破折号分组后添加一个选项卡:

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

请注意,这将$string在原地替换。

于 2012-12-15T16:26:03.130 回答