2

使用 Perl,我想搜索一串核苷酸 (AGCT) 以查找不少于且不多于三个连续重复至少七次的核苷酸的模式。我还需要保存该组合以打印到文件以及总数。

这三个核苷酸的模式将是未知的,因为虽然只有 64 种可能的组合,但我们不知道哪一种是重复组合。

关于如何解决这个问题,我脑子里有两条思路:

创建一个可能组合的列表并检查它,同时产生一个计数。这似乎不可行,因为每三个核苷酸就会产生一个匹配。它仍然不能解决连续匹配的问题。

或 检查前三个核苷酸与接下来的三个,如果匹配,检查接下来的三个。如果不匹配,则将阅读框移至字符串中的第二个核苷酸并再次尝试搜索。

4

1 回答 1

3

这个正则表达式应该可以解决问题:

/( ([ACGT]{3}) \2{6,} )/x

匹配三个 ACGT 字符,然后再重复捕获$2至少六次。整个匹配的字符串在$1并且将具有实际组长度的三倍:$n = length($1)/3.

测试:

my $regex = qr/( ([ACGT]{3}) \2{6,} )/x;
"TACGACGACGACGACGACGACGACGT" =~ $regex;
printf "Matched %s exactly %d times\n", $2, length($1)/3;

输出:

Matched ACG exactly 8 times

看起来挺好的。

于 2013-02-21T20:11:56.387 回答