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

perl check for valid DNA sequence with regex

我想编写一个子程序,将 FASTA 文件作为参数并打印出序列(不带 header)。 该子例程应检查序列是否包含 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";
}

当我 运行 这段代码时,我得到 'invalid sequence' 作为输出。 当我离开 '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 开头的行开头。您应该扩展匹配项。