我正在使用 perl 和正则表达式来查找最小大小为 45 个碱基的 ORF(开放阅读框)。基本上它的意思是: 找到一个子串 一个仅由字母 ATGC(没有空格或换行符)组成的字符串:
- 以“ATG”开头
- 以“TAG”或“TAA”或“TGA”结尾,
- 至少有 39 个字符长
- 可被 3 整除
我的第一个代码是:
$CDSString = "ATGCACACACACACACACACACACACACACACACACACACACACACACACACACACATGA";
if($CDSString =~ m/(ATG.{45,}(TAG|TAA|TGA))/)
{
my $CDSCurrent = $1;
if ((length($CDSCurrent) % 3) == 0)
{
# do something
}
}
效果很好,但我认为可能有更好的方法。所以我尝试了:
$CDSString = "ATGCACACACACACACACACACACACACACACACACACACACACACACACACACACATGA";
if ($CDSString =~ m/ATG(...){13,}(TAG|TAA|TGA)/ )
{
# do something
}
但由于某种原因,它与上面的字符串不匹配,我不知道为什么。任何人都可以弄清楚吗?先感谢您。