因此,我正在使用Perl正则表达式对含有两种酶的DNA序列进行基本的限制性消化。我有一个更大的程序,但似乎我应该能够用正则表达式在几行中完成这个。使用输入的DNA序列,我需要捕获酶切位点,以及连续位点之间的所有DNA。
输入: CATCCCCCGTCAAAAACACTTGAAAAACAT
酶1切割位点 CA
酶2切割位点: TG
预期输出:
CATCCCCCGTCA
CAAAAACA
CACTTG
TGAAAAACA
CAT
我使用以下脚本:
my $input = "CATCCCTCGTCAAAAACACTTGAAAAACAT";
my $enzyme1="CA";
my $enzyme2="TG";
@cuts = $input =~ /(CA|TG[.]*CA|TG)/ig;
foreach $cut (@cuts){
print "$cut\n";
}
然而,当我得到以下内容时:
CA
CA
CA
TG
CA
为什么我的正则表达式没有捕获两个切割位点加上干预序列?我使用括号进行捕获,但它一定不正确。
感谢您的帮助。
答案 0 :(得分:3)
您可以使用Positive Lookahead断言捕获来获得重叠匹配:
my @cuts = ( $input =~ /(?=((?:CA|TG).*?(?:CA|TG|$)))/ig );