Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex perl使用正则表达式检查有效的DNA序列_Regex_Perl_Bioinformatics_Dna Sequence_Bioperl - Fatal编程技术网

Regex perl使用正则表达式检查有效的DNA序列

Regex perl使用正则表达式检查有效的DNA序列,regex,perl,bioinformatics,dna-sequence,bioperl,Regex,Perl,Bioinformatics,Dna Sequence,Bioperl,我想写一个子程序,它将一个FASTA文件作为参数,并打印出序列(不带头)。 子程序应检查序列是否包含除DNA碱基(A、T、G、C)以外的任何其他字母 这是我的密码: scalar_sequence ("sequence.fa"); sub scalar_sequence { my $file = $_[0]; my $sequence; open (READ, $file) || die "Cannot open $file: $!.\n"; while (&l

我想写一个子程序,它将一个FASTA文件作为参数,并打印出序列(不带头)。 子程序应检查序列是否包含除DNA碱基(A、T、G、C)以外的任何其他字母

这是我的密码:

scalar_sequence ("sequence.fa");

sub scalar_sequence {
    my $file = $_[0];
    my $sequence;
    open (READ, $file) || die "Cannot open $file: $!.\n";
    while (<READ>){
        if (/^>/){
            next;
        } 
        if (/^[ATCG]/){
            $sequence .= $_;
        } else {
            die "invalid sequence\n";
        }
    }
    print $sequence, "\n";
}
scalar_序列(“sequence.fa”);
亚标量序列{
我的$file=$\u0];
我的$sequence;
打开(读取$file)| | die“无法打开$file:$!。\n”;
而(){
如果(/^>/){
下一个
} 
如果(/^[ATCG]/){
$sequence.=$\uux;
}否则{
“无效序列\n”;
}
}
打印$sequence,“\n”;
}
当我运行这段代码时,我得到“无效序列”作为输出。 当我省略“else”时,即使序列包含另一个字母,它也会打印出序列

有什么问题吗


提前谢谢

问题在这里
/^[ATCG]/
这一行应该是
/^[ATCG]+$/

你的代码应该是

chomp;  
next if (/^>/); # skip for header
next if(/^\s*$/);  #skip for empty line
if (/^[ATCG]+$/){
        $sequence .= $_;
    } else {
        die "invalid sequence\n";
    }

你只考虑开始A或T或G或C.的开头,你应该扩展匹配。

<代码> ^ <代码>应该在<代码> []>代码>:<代码>如果(/[ATCG]/< < /代码>好,现在它打印序列而不是错误消息,但是:即使包含无效的字母,它也会打印序列。因此不起作用:/Be advice:bioperl的
seqIO
比在本机perl中读取fasta文件快约10倍。如果你处理的是高等生物(大基因组),这可能是一个巨大的恩惠。也不起作用,打印出“无效序列”,即使序列是无效的valid@ic23oluk因为新线。在脚本中添加
chomp
。@ic23oluk在每个fasta文件中的最后一行是新行。请从您的
状态中移除模具。然后打印
$sequence
。这并不是我想要的:如果我省略'die',它会打印序列,即使序列中包含无效字母,但没有这些无效字母所在的行。我想写一个算法,当包含一个或多个无效字母时停止,并在删除fasta文件中的最后一个换行符时返回错误消息。该算法可以按需要工作,但如何自动完成?