효소 절단에 대한 정규 표현이 존재합니까?
-
13-09-2019 - |
문제
(이론적) 정규 표현이 존재합니까? 트립신 의 절단 단백질 시퀀스? 트립신의 절단 규칙은 다음과 같습니다.
예시:
시퀀스의 절단 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 : v5.10.0에서 MSWIN32-X64-MULTI-STREAD 용으로 제작되었습니다.
해결책
당신은 실제로 긍정적 인 외관과 부정적인보기의 조합을 사용해야합니다. 올바른 (Perl) 구문은 다음과 같습니다.
my @peptides = split(/(?!P)(?<=[RK])/, $seq);
다른 팁
당신은 사용할 수 있습니다 외관 어설 션 해당 사례를 제외합니다. 이와 같은 것이 효과가 있어야합니다.
split(/(?<=[RK](?!P))/, $seq)
Lookaheads와 Lookbehinds를 사용 하여이 물건과 일치하는 동안 여전히 올바른 위치를 얻을 수 있습니다.
/(?<=[RK])(?!P)/
해야 한다 R 또는 K 이후에 P 지점으로 나뉘어지는 것은 P가 뒤 따릅니다.
파이썬에서는 사용할 수 있습니다 finditer
시작 및 스팬 정보를 포함하여 겹치지 않는 패턴 일치를 반환하는 방법. 그런 다음 문자열을 재 구축하는 대신 문자열 오프셋을 저장할 수 있습니다.