9

蛋白质序列的(理论上)胰蛋白酶切割是否存在正则表达式?胰蛋白酶的切割规则是:在 R 或 K 之后,但不在 P 之前。

例子:

序列的切割VGTKCCTKPESERMPCTEDYLSLILNR应产生以下 3 个序列(段):

 VGTK
 CCTKPESER
 MPCTEDYLSLILNR

请注意,在第二个肽段中 K 之后没有切割(因为 P 在 K 之后)。

在 Perl 中(它也可以在 C#、Python 或 Ruby 中):

  my $seq = 'VGTRCCTKPESERMPCTEDYLSLILNR';
  my @peptides = split /someRegularExpression/, $seq;

我使用了这种解决方法(其中首先在序列中插入一个剪切标记 =,如果 P 紧接在剪切标记之后,则再次删除):

  my $seq      = 'VGTRCCTKPESERMPCTEDYLSLILNR';
  $seq         =~ s/([RK])/$1=/g; #Main cut rule.
  $seq         =~ s/=P/P/g;       #The exception.
  my @peptides = split( /=/, $seq);

但这需要修改一个可能很长并且可能有数百万个序列的字符串。有没有一种方法可以将正则表达式与拆分一起使用?如果是,正则表达式是什么?


测试平台:Windows XP 64 位。ActivePerl 64 位。来自 perl -v:为 MSWin32-x64-multi-thread 构建的 v5.10.0。

4

4 回答 4

16

您确实需要结合使用积极的后瞻和消极的前瞻。正确的(Perl)语法如下:

my @peptides = split(/(?!P)(?<=[RK])/, $seq);
于 2009-12-04T19:30:32.470 回答
6

您可以使用环视断言来排除这种情况。像这样的东西应该工作:

split(/(?<=[RK](?!P))/, $seq)
于 2009-12-04T19:20:54.963 回答
4

您可以使用lookaheads 和lookbehinds 来匹配这些东西,同时仍然获得正确的位置。

/(?<=[RK])(?!P)/

应该最终在 R 或 K 之后没有 P 的点上分裂。

于 2009-12-04T19:23:23.573 回答
1

在 Python 中,您可以使用该finditer方法返回不重叠的模式匹配,包括开始和跨度信息。然后,您可以存储字符串偏移量,而不是重建字符串。

于 2009-12-04T19:25:41.163 回答