Существует ли регулярное выражение для ферментативного расщепления? - PullRequest
8 голосов
/ 04 декабря 2009

Существует ли регулярное выражение для (теоретического) триптического расщепления белка последовательностей? Правило расщепления для трипсина: после 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);

Но это требует модификации строки, которая потенциально может быть очень длинной и может содержать миллионы последовательностей. Есть ли способ, где регулярное выражение может использоваться с split? Если да, каким будет регулярное выражение?


Тестовая платформа: Windows XP 64 бит. ActivePerl 64 бит. Из perl -v: v5.10.0 для MSWin32-x64-multi-thread.

Ответы [ 4 ]

15 голосов
/ 04 декабря 2009

Вам действительно нужно использовать комбинацию позитивного взгляда сзади и негативного взгляда вперед. Правильный (Perl) синтаксис выглядит следующим образом:

my @peptides = split(/(?!P)(?<=[RK])/, $seq);
6 голосов
/ 04 декабря 2009

Вы можете использовать проверочные утверждения , чтобы исключить эти случаи. Примерно так должно работать:

split(/(?<=[RK](?!P))/, $seq)
4 голосов
/ 04 декабря 2009

Вы можете использовать lookaheads и lookbehinds, чтобы соответствовать этому материалу, все еще занимая правильную позицию.

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

Если закончится расщеплением точки после R или K, за которой не следует P.

1 голос
/ 04 декабря 2009

В Python вы можете использовать метод finditer для возврата неперекрывающихся совпадений с образцами, включая информацию о начале и диапазоне. Затем вы можете сохранить смещения строк вместо перестроения строки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...