2014-10-28 1 views
0

Может кто-нибудь мне помочь - мне нужно регулярное выражение, которое соответствует только строкам, содержащим символы ADFHKMPRTWCEGILNQSVY и NOTHING else.Perl регулярное выражение - строки должны содержать ADFHKMPRTWCEGILNQSVY и ничего больше

мне нужно Переберите строк текста, которые выглядят следующим образом:

>gi|46450118|gb|AAS96767.1| femAB family protein [Desulfovibrio vulgaris str. Hildenborough] 
MVDLSRKKTQALLPTDILFQTPYWAQVKTRLGMESHAFDIRSSGPWGDVLVLLRRFGRHRVAIVPQGPEV 
APPHEDYGVYLESFSLALAEGLGPDVAFIRYDLPWVSPYADEMHDEGWNAFPEARLRELRMNMGTRHWNL 
RKSFQDLTVASSLVVDITGEEAAVLERMKPKTRYNIGLARRKGVAVREVGRESLPQFHALYRQTAIRNGF 
EPCSITHFSAMFHALCDGAGSTELLFLLATHGTDILAGCIVGLAGRTANFLYGASGNVKRNLMAPYLMHW 
TAMCHARDRGCHDYEMGAVPPGHDPAHPFHGLYRFKTGFGGRVALRSGSWDYPLDHAAYRDFCNAESLYR 
TDAAPGRTQ 

>gi|46450117|gb|AAS96766.1| iron-sulfur protein CooF [Desulfovibrio vulgaris str. Hildenborough] 
MNHEELFVIQAEAEKCRACRKCELACIASHNNLTIKEAAKKRTVFAPRVHVVKTDEVKMPVQCRQCKDAP 
CARVCPTRALVQDDGVVTMRAQFCAACRLCIMACPYGAISLSFIGLPEEDEAGAMHGREVAVRCDLCSEW 
RAREGKSSCACVEACPTKALHMVPLAEARGRHQ 

>gi|46450116|gb|AAS96765.1| hydrogenase nickel insertion protein HypA [Desulfovibrio vulgaris str. Hildenborough] 
MHEASIVAGIMRIVEEEAARHDVTRIARVRLRVGLLTGVEPRTLTACFELYSEGTVAEGASLDLETVPAL 
GTCHACGATFDLHRRCFACPTCGNDDITLEGGRELTIAGLEVPQPEGATA 

>gi|46450115|gb|AAS96764.1| carbon monoxide-induced hydrogenase CooH, putative [Desulfovibrio vulgaris str. Hildenborough] 
MSTPDSTTQTWTLPVGPLHVALEEPMYFKLDVDGEIVRNVEITAGHVHRGMEALAMRRNLFQNIVLTERV 
CSLCSNSHPFTYCMAVEHLAGIEVPARADHLRVVAEEIKRTASHLFNVAILAHIIGFKSLFMHVMEVREI 
MQDIKETVYGNRMDLAANCIGGVKYDVDAELLAMLLAGLDKVERNAREIYRIYASDPMVTGRTTGIGVLP 
PDEARRFGVVGPVARGSGLAVDVRRDVPYAAYPQLSFDVITEEGCDVRARALVRLREVFESISIIRQCVA 
TLPEGAMTVIMPEIPAGQSVARSEAPRGELMYYLRTDGTDIPNRLKWRVPSYMNWDALGVMMRDANVADI 
PLIVNSIDPCISCTER 

>gi|46450114|gb|AAS96763.1| hydrogenase, CooU subunit, putative [Desulfovibrio vulgaris str. Hildenborough] 
MPDNALTAPLATALDALAEAEGFTWTRDAHGNAYGWLRLAERDTLPEAARLLAEGGARLATVTAYDPVRE 
PGVPRQEIAYHFDVHGTTLTVTVVLDPECPSVPSITPHFRNADWNEREFMEMYDIAVPGHPNPRRLFLDE 
KLDAGIMNTIIPLSTMTNGASTQNLWERILAARPGDKA 

>gi|46450113|gb|AAS96762.1| hydrogenase, CooX subunit, putative [Desulfovibrio vulgaris str. Hildenborough] 
MFGFLKVLARNVLKGPSTDPFPFAEAHTPARFRGQVRLDPALCVGCAICHHVCAGGAINIAEREDGSGYD 
FTVWHNTCALCGLCRHYCPTGAITLSNDWHNAHLQSQKYDWCERQFVPFMQCEGCGAHIRPLPPQLAARA 
YGPGGFDFASFMRLCPSCRQLAAARADVHIPEASAMPAAPAGHADEPAIREGDATAVTVKGDETPATGVQ 
Q 

Все они начинаются с>, так что я мог бы просто посмотреть на это. Тем не менее, я хочу сделать двойной уверен, что я получаю правильные строки, поэтому я также хочу, чтобы регулярное выражение соответствовало строкам, содержащим ADFHKMPRTWCEGILNQSVY и ничего больше.

Cheers,

Стефан

+0

Просто чтобы прояснить - я не имею в виду строку ADFHKMPRTWCEGILNQSVY, но строки, содержащие любой из этих символов, и никто другой. – Stefan

+3

Можем ли мы взглянуть на ваш фактический код? – Toto

ответ

2

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

use strict; 
use warnings; 

while (<DATA>) { 
    if (/^[ADFHKMPRTWCEGILNQSVY]+$/) { 
     print $_; 
    } 
} 

__DATA__ 
>gi|46450118|gb|AAS96767.1| femAB family protein [Desulfovibrio vulgaris str. Hildenborough] 
MVDLSRKKTQALLPTDILFQTPYWAQVKTRLGMESHAFDIRSSGPWGDVLVLLRRFGRHRVAIVPQGPEV 
APPHEDYGVYLESFSLALAEGLGPDVAFIRYDLPWVSPYADEMHDEGWNAFPEARLRELRMNMGTRHWNL 
RKSFQDLTVASSLVVDITGEEAAVLERMKPKTRYNIGLARRKGVAVREVGRESLPQFHALYRQTAIRNGF 
EPCSITHFSAMFHALCDGAGSTELLFLLATHGTDILAGCIVGLAGRTANFLYGASGNVKRNLMAPYLMHW 
TAMCHARDRGCHDYEMGAVPPGHDPAHPFHGLYRFKTGFGGRVALRSGSWDYPLDHAAYRDFCNAESLYR 
TDAAPGRTQ 

Выход:

MVDLSRKKTQALLPTDILFQTPYWAQVKTRLGMESHAFDIRSSGPWGDVLVLLRRFGRHRVAIVPQGPEV 
APPHEDYGVYLESFSLALAEGLGPDVAFIRYDLPWVSPYADEMHDEGWNAFPEARLRELRMNMGTRHWNL 
RKSFQDLTVASSLVVDITGEEAAVLERMKPKTRYNIGLARRKGVAVREVGRESLPQFHALYRQTAIRNGF 
EPCSITHFSAMFHALCDGAGSTELLFLLATHGTDILAGCIVGLAGRTANFLYGASGNVKRNLMAPYLMHW 
TAMCHARDRGCHDYEMGAVPPGHDPAHPFHGLYRFKTGFGGRVALRSGSWDYPLDHAAYRDFCNAESLYR 
TDAAPGRTQ 

Разбирая регулярное выражение, мы имеем:

  • ^ соответствует началу строки
  • [ADFHKMPRTWCEGILNQSVY] соответствует любому из символов в квадратных скобках
  • [ADFHKMPRTWCEGILNQSVY]+ означает матч 1 или несколько раз
  • $ соответствует концу строки
+1

Спасибо, очень ценится. :))) – Stefan

5

Что-то вроде этого

/^[ADFHKMPRTWCEGILNQSVY]+$/ 
+1

Спасибо, это именно то, что мне нужно. – Stefan

+3

@ user3790338, тогда вы должны выбрать его ответ в качестве решения. – Axeman

0

Мой код:

#!/usr/bin/perl 

while (<>) 
{ 

    if (/[ADFHKMPRTWCEGILNQSVY]/ and !/[0-9a-z>:;+-,.]/) 
    { 
     chomp; 

     for ($i = 0; $i < length($_); $i++) 
     { 

      if (substr($_,$i,1) eq "A") 
      { 
      $aminoacids{A}++; 
      } 
      elsif (substr($_,$i,1) eq "D") 
      { 
      $aminoacids{D}++; 
      } 
      elsif (substr($_,$i,1) eq "F") 
      { 
      $aminoacids{F}++; 
      } 
      elsif (substr($_,$i,1) eq "H") 
      { 
      $aminoacids{H}++; 
      } 
      elsif (substr($_,$i,1) eq "K") 
      { 
      $aminoacids{K}++; 
      } 
      elsif (substr($_,$i,1) eq "M") 
      { 
      $aminoacids{M}++; 
      } 
      elsif (substr($_,$i,1) eq "P") 
      { 
      $aminoacids{P}++; 
      } 
      elsif (substr($_,$i,1) eq "R") 
      { 
      $aminoacids{R}++; 
      } 
      elsif (substr($_,$i,1) eq "T") 
      { 
      $aminoacids{T}++; 
      } 
      elsif (substr($_,$i,1) eq "W") 
      { 
      $aminoacids{W}++; 
      } 
      elsif (substr($_,$i,1) eq "C") 
      { 
      $aminoacids{C}++; 
      } 
      elsif (substr($_,$i,1) eq "E") 
      { 
      $aminoacids{E}++; 
      } 
      elsif (substr($_,$i,1) eq "G") 
      { 
      $aminoacids{G}++; 
      } 
      elsif (substr($_,$i,1) eq "I") 
      { 
      $aminoacids{I}++; 
      } 
      elsif (substr($_,$i,1) eq "L") 
      { 
      $aminoacids{L}++; 
      } 
      elsif (substr($_,$i,1) eq "N") 
      { 
      $aminoacids{N}++; 
      } 
      elsif (substr($_,$i,1) eq "Q") 
      { 
      $aminoacids{Q}++; 
      } 
      elsif (substr($_,$i,1) eq "S") 
      { 
      $aminoacids{S}++; 
      } 
      elsif (substr($_,$i,1) eq "V") 
      { 
      $aminoacids{V}++; 
      } 
      elsif (substr($_,$i,1) eq "Y") 
      { 
      $aminoacids{Y}++; 
      } 
      else 
      { 
      print "BAD AMINO ACID $i ", substr($_,$i,1), " ", $_, "\n"; 
      } 
     } 


    } 


} 

foreach $key (keys %aminoacids) 
{ 
print "$key -> $aminoacids{$key}\n"; 
}