2016-04-14 17 views
-3

Bir regex ile geçerliyse bir dosyayı test etmek istiyorum. file_string = >sp|Q1ABCD|003R_FRG3G(438aa)Uncharacterizedprotein1A.[virus1(isolateABCD)(AB-1)]MLFLGTIGLAVVVGGLMAYGYYYGHHDE2-9:ArpllGKT>sp|Q2DBAC|004R_FRG3G(60aa)Uncharacterizedprotein1B.[virus2(isolateBGF)(AB-2)]NAKYDTDQGVGRMLFLGTIGLAVVVGGLMAYGYYYDGKTPSSGTSFHTASPSFSSRYRY33-40:GyyydGKT50-100:GyyydGKT>sp....... > sp .... ile demek istiyorum. Kullandığım normal ifade her zaman eşleşir.python regex assistence

( ) Bu doğru değil. Nasıl düzeltebilirim?
+0

"devam ediyor" diyor - ne diyor? Ayrıca neden '' 'önce' ''? Boru işaretinden kaçmak istemiyor musun? – Torxed

+0

"bu yapı" - hangi yapı? Lütfen mümkün olduğunca açık olması için sorunuzu düzenleyin – Francesco

+0

['^ (> sp \ | [PQ] [^ |] + \ |. +? \ (\ d + aa \) deneyin. *? \ [. *? \ ] [AC-IK-NP-TVWY] * \ d + - \ d +. +) + $ '] (https://regex101.com/r/mY1uD0/2). –

cevap

0

Sağladığınız normal ifadeyle, ilk girdinin ilk kısmı ve son girişin son kısmı eşleşiyorsa bu yeterlidir. Çünkü, Wiktor S'nin işaret ettiği gibi, .* parçaları ,hiçbir şeyi.

(gibi değil gerçekten yapmak o yakalamak için gereğini son olasılıkla tekrar ederek her girişin bir parçası) Burada bazı varsayımları yaptık

^(>sp\|[PQ].{5,7}\|(?:.(?!>sp))+?\(\d+aa\)(?:.(?!>sp))*?\[[^\]]*?\][ACDEFGHIKLMNPQRSTVWY]*(?:\d+-\d+:(?:(?!>sp).)+)+)+$ 

gibi regex kısıtlayan deneyin böylece belki biraz uyarlamak zorundayım.

See it in action at regex101.

Saygılar