Regex 在perl中,如何使用一个文件中的正则表达式来匹配另一个文件中的FASTA序列

Regex 在perl中,如何使用一个文件中的正则表达式来匹配另一个文件中的FASTA序列,regex,perl,fasta,Regex,Perl,Fasta,我有两个文件,第一个(文件1)包含几个REXEGE,而另一个(文件2)包含FASTA序列。我的意图是使用file1中的正则表达式来检查它们是否匹配file2中的任何Fasta序列,并打印至少匹配一个序列的正则表达式,以及它们匹配的序列数。我本想提供我的示例代码,但我甚至无法开始。请帮忙 file1的结构是每行都有一个ID,后跟'>>',然后是正则表达式 e.g FGER_HWW_PRT >> ..DW[ALK]..[^P]..[VI]{2,4} TKAR_GLW_NQW &g

我有两个文件,第一个(文件1)包含几个REXEGE,而另一个(文件2)包含FASTA序列。我的意图是使用file1中的正则表达式来检查它们是否匹配file2中的任何Fasta序列,并打印至少匹配一个序列的正则表达式,以及它们匹配的序列数。我本想提供我的示例代码,但我甚至无法开始。请帮忙

file1的结构是每行都有一个ID,后跟'>>',然后是正则表达式

e.g FGER_HWW_PRT >> ..DW[ALK]..[^P]..[VI]{2,4}
    TKAR_GLW_NQW >> [^VKR]{0,2}..FP[D].T.N.Q.

    etc...
file2在一行上有一个序列的idenfier,在下一行上有一个序列的idenfier

e.g     >lac9_B: details details
    GFVTSDRWPALKMSRWSLEMVWASRGYPLVNDRMWSWSDDDP
    >serP_A: otherdetails details2
    GFVLSDPPPPALKMSRWSLEMVWASRGYPLVNDPWQRTKRKRKDRTCWASNYIHDRP

          etc...

提前感谢。

这可能会让您开始学习。如果您认为这可能对您有用,请告诉我,我可以解释发生了什么:

#!/usr/bin/perl
use warnings;
use strict; 
(使用.fasta文件作为输入):

输出:

Name: >serP_A: otherdetails details2    contains: 'details2'
Sequence: GFVLSDPPPPALKMSRWSLEMVWASRGYPLVNDPWQRTKRKRKDRTCWASNYIHDRP

如果您不知道从何处开始,我将从消除从文件1获取正则表达式的需要开始,然后尝试编写一个Perl脚本,该脚本直接包含一个或两个正则表达式,并打开文件2并查找它们。如果你遇到了这个问题,你可以在这里发布代码来解决这个问题。
my $match = "details2";
while (<$input>) {
    chomp;
    push @head, $_ if /^>/;
    push @seq, $_ if /^[A-Z]/;
    @hash{@head} = @seq;
}
foreach my $header (keys %hash){
    if ($header =~ /$match/){
    print "Name: $header\tcontains: '$match'\nSequence: $hash{$header}\n" ; 
    }
}
Name: >serP_A: otherdetails details2    contains: 'details2'
Sequence: GFVLSDPPPPALKMSRWSLEMVWASRGYPLVNDPWQRTKRKRKDRTCWASNYIHDRP