代码之家  ›  专栏  ›  技术社区  ›  Peter Mortensen icecrime

是否存在用于酶切的正则表达式?

  •  8
  • Peter Mortensen icecrime  · 技术社区  · 15 年前

    tryptic protein 序列?胰蛋白酶的切割规则是:在R或K之后,而不是在P之前。

    例子:

    VGTKCCTKPESERMPCTEDYLSLILNR 结果应该是这3个序列( peptide s) :

     VGTK
     CCTKPESER
     MPCTEDYLSLILNR
    

      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);
    

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


    测试平台:Windows XP 64位。ActivePerl 64位。来自perl-v:v5.10.0,它是为MSWin32-x64多线程构建的。

    4 回复  |  直到 15 年前
        1
  •  16
  •   Gabriel Reid    15 年前

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

    my @peptides = split(/(?!P)(?<=[RK])/, $seq);
    
        2
  •  6
  •   Gumbo    15 年前

    look-around assertions 排除这种情况。像这样的方法应该会奏效:

    split(/(?<=[RK](?!P))/, $seq)
    
        3
  •  4
  •   Anon.    15 年前

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

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

    应该

        4
  •  1
  •   Peter Mortensen icecrime    15 年前

    在Python中,可以使用 finditer