我正在解析包含
的fasta对齐文件gi|216CCAACGAAATGATCGCCACACAA
gi|21-GCTGGTTCAGCGACCAAAAGTAGC
我想将此字符串拆分为:
gi|216 CCAACGAAATGATCGCCACACAA
gi|21- GCTGGTTCAGCGACCAAAAGTAGC
对于第一个字符串,我使用
$aar=split("\d",$string);
但那没用。我该怎么办?
答案 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
。