2009-12-04 15 views
8

protein dizilerinin (teorik) tryptic bölünmesi için düzenli bir ifade var mı? tripsin klivaj kural: VGTKCCTKPESERMPCTEDYLSLILNR 3 Bu sekanslar ile sonuçlanmalıdır dizisininEnzimatik bölünme için düzenli bir ifade var mı?

bölünmesi (peptide lar):

VGTK 
CCTKPESER 
MPCTEDYLSLILNR 

R ya da K'dan sonra değil

Örnek P. önce İkinci peptitte K'den sonra hiçbir bölünme olmadığını unutmayın (çünkü P, K'den sonra gelir).

Perl

(sadece de C# olabilirdi Python Ruby): Bu iş çevresinde (burada bir kesim işaretleyici kullanılmış, = Birinci sıra sokulur

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

ve P) kesme makinesi hemen sonra ise tekrar kaldırılır:

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

Ama bu potansiyel olarak çok uzun olabilir ve dizilerin milyonlarca olabilen bir dizeye değişiklik yapılmasını gerektirir. Düzenli ifadenin bölünmeyle birlikte kullanılabileceği bir yol var mı? Eğer evet ise, normal ifade ne olurdu?


Test platformu: Windows XP 64 bit. ActivePerl 64 bit. MSWin32-x64-multi-thread için tasarlanmış perl -v: v5.10.0.

+0

bölünme ........ – user105033

+0

@unknown: Bağlam ... http://en.wikipedia.org/wiki/Tryptic aşağıdaki şekildedir: Doğru (Perl) sözdizimi "Trypsins endopeptidaz olarak kabul edilir, yani, yarılma, polipeptidlerin uçlarında bulunan terminal amino asitlerinden ziyade polipeptit zinciri içinde gerçekleşir. " –

+4

Muhtemelen en iyi SO soru. Aynı anda tamamen geçerli ve hesap verebilirken, başkaları kod, bilim ve cinsel çıkarımları bir kerede övünebilir mi? – shuckster

cevap

14

Pozitif bir görünüm ve negatif bir görünüm bileşimini kullanmanız gerekiyor.

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

Bkz. Negatif bakış ve olumlu lookbehind –

+0

Evet, bu işe yarıyor. –

6

Bu durumları hariç tutmak için look-around assertions'u kullanabilirsiniz. Böyle bir şey çalışması gerekir: Hala doğru konumunu elde ederken bu şeyleri maç için lookaheads ve geriye ilerleme kullanabilirsiniz

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

Eğer yanılıyorsam özür dilerim, ama bu R/K'dan önce sıraya ayrılmayacak mıdır? –

+0

Gerçekten de, bu işe yaramaz. RK'nin pozitif bir bakış açısı olması gerekir (? <= ...) –

+0

@Anon ve gab: evet, daha önce kesilmesiyle sonuçlanır; 4 peptit: VGT, RCCTKPESE, RMPCTEDYLSLILN ve R –

4

.

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

P.

Python
+0

'/ (? <[RK]) (?= [^ P])/', sonundaki boş bir dizeyi ayırmayı önler – ysth

+0

Her ikisi için: derleme zamanında kabul edilmez. Ysth için: "Sekans (? <[... ...] ifadesiyle tanınmaz; <- BURAYA işaretlenir: m/(? <[<- - BURAYA RK)) (? = [^ P]) /". Soruyu platform bilgileriyle güncelledim. –

+0

Özür dilerim, olumlu lookbehind sözdizimi berbat ettim. Olması gerekir. (? <= ... '. Bunu düzelteceğim. –

1

Eğer örtüşmeyen desen dönmek için finditer yöntemi kullanabilirsiniz başlamasından dahil maçları takip edilmeyen bir R veya K sonrasında bir noktaya bölme sona mı ve açıklık bilgisi. Ardından, dizeyi yeniden oluşturmak yerine dize ofsetlerini saklayabilirsiniz.

+2

perl bunu şöyle yapabilir: http://stackoverflow.com/questions/467800/is-there-a-perl-equivalent-of-pythons-re-findall-re-finditer-iterative-regex-re – dwarring

İlgili konular