匹配fasta文件中的第一个和最后一个字符

时间:2015-09-11 11:02:23

标签: regex r grep fasta

我有一个如下的fasta序列:

fasta_sequences
    seq1_1
    "MTFJKASDKASWQHBFDDFAHJKLDPAL"
    seq1_2
    "GTRFKJDAIUETZUQOIHHASJKKJHPAL"
    seq1_3
    "MTFJHAZOQIIREUUBSDFHGTRF"
    seq2_1
    "JUZGFNBGTFCKAJDASEJIJAS"
    seq2_1
    "MTFHJHJASBBCMASDOEQSDPAL"
    seq2_3
    "RTZIIASDPLKLKLKLLJHGATRF"
    seq3_1
    "HMTFLKBNCYXBASHDGWPQWKOP"
    seq3_2
    "MTFJKASDJLKIOOIEOPWEIOKOP"

我想只保留那些以MTF开头并以KOP或TRF或PAL结尾的序列。最后它应该像

    seq1_1
    "MTFJKASDKASWQHBFDDFAHJKLDPAL"
    seq1_3
    "MTFJHAZOQIIREUUBSDFHGTRF"
    seq2_1
    "MTFHJHJASBBCMASDOEQSDPAL"
    seq3_2
    "MTFJKASDJLKIOOIEOPWEIOKOP"

我在R中尝试了以下代码,但它给了我什么不包含

new_fasta=grep("^MTF.*(PAL|TRF|KOP)$")

任何人都可以帮助您获得所需的输出。提前谢谢。

2 个答案:

答案 0 :(得分:1)

这是我猜的方式;

对于fasta_sequences中的每个元素; (如果fasta_sequences是包含序列的载体)

newseq = list()
it=1
for (i in fasta_sequences){
  # i is seq1_1, seq1_2 etc.
  a=substr(i,1,3)
  if (a=="MTF"){
  x=substr(i,(nchar(i)-2),nchar(i))

  if ( x=="PAL" | x=="KOP" | x=="TRF"){
    newseq[it]=i
    it=it+1
  }
  }
}

希望有所帮助

答案 1 :(得分:0)

new_fasta=grep("^MTF.*(PAL|TRF|KOP)$",fasta_sequences,perl=True)


                                      ^^^^^^^^^

添加perl=True选项。