Pergunta

Será que a exist expressão regular para (teórico) tríptico clivagem de proteína seqüências? A regra de clivagem para tripsina é:. Após R ou K, mas não antes de P

Exemplo:

A clivagem da sequência de VGTKCCTKPESERMPCTEDYLSLILNR deve resultar nestas sequências 3 ( péptido s):

 VGTK
 CCTKPESER
 MPCTEDYLSLILNR

Note-se que não há nenhuma clivagem após K no segundo péptido (porque P vem depois K).

Em Perl (que poderia muito bem ter sido em C #, Python ou Ruby):

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

eu usei este trabalho a cerca de (onde um marcador de corte, =, é primeiro inserido na sequência e removido de novo, se P é imediatamente depois de a máquina de corte):

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

Mas isso requer modificação para uma cadeia que pode ser potencialmente muito longo e pode haver milhões de sequências. Existe uma maneira em que uma expressão regular pode ser usado com divisão? Se sim, qual seria a expressão regular ser?


plataforma de Teste: Windows XP de 64 bits. ActivePerl 64 bits. De perl -v:. V5.10.0 construído para MSWIN32-x64-multi-thread

Foi útil?

Solução

Você de fato precisa usar a combinação de um lookbehind positivo e um lookahead negativo. O (Perl) sintaxe correta é a seguinte:

my @peptides = split(/(?!P)(?<=[RK])/, $seq);

Outras dicas

Você pode usar afirmações olhar-around de excluir que os casos. Algo como isto deve funcionar:

split(/(?<=[RK](?!P))/, $seq)

Você pode usar lookaheads e visões traseiras para coincidir com essas coisas e ainda obter a posição correta.

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

deve acabar divisão num ponto após um R ou K que não é seguido por um P.

Em Python, você pode usar o método finditer para retornar não sobrepostas partidas padrão, incluindo o início e informações span. Você pode então armazenar os deslocamentos de cadeia em vez de reconstruir a string.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top