문제

(이론적) 정규 표현이 존재합니까? 트립신 의 절단 단백질 시퀀스? 트립신의 절단 규칙은 다음과 같습니다.

예시:

시퀀스의 절단 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 시작 및 스팬 정보를 포함하여 겹치지 않는 패턴 일치를 반환하는 방법. 그런 다음 문자열을 재 구축하는 대신 문자열 오프셋을 저장할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top