2015-11-03 101 views
0

我有幾行文本(RNA序列),我想製作一個關於字符保護的矩陣,因爲它們根據相似性進行對齊。正則表達式替換(如果發現模式替換爲符號符號)

但我有幾個空白(-),實際上意味着缺少一個完整的結構(例如#- > 100)如果發生這種情況,我想改變點(用於區分的其他符號)與找到相同的數量。

我想我可以用正則表達式來做到這一點,但是我不能僅僅替換模式,或者當我這樣做時,我用一些不正確的點數來替換所有的東西。

我的代碼如下所示:

with alnfile as f_in: 
    if re.search('-{100,}', elem,): 
      elem = re.sub('-{100,}','.', elem,) #failed alternative*len(m.groups(x)), elem) 
      print len(elem) # check if I am keeping the lenghth of my sequence 
      print elem[0:100] # check the start 

      f1.write(elem) 

,如果我的文件是:

ONE ----(*100)atgtgca----(*20) 

我越來越:

ONE ..(*100)atgtgca----(*20) 

我的另一變化是唯一的點,然後我得到:

ONE ....(*100)atgtgca....(*20) 

我需要什麼:

ONE ....(*100)atgtgca----(*20) 

我知道我失去了一些東西,但我無法弄清楚?有沒有一個國旗或東西可以幫助我,或者是否會允許這樣做的確切變化?

+0

什麼是'x' ???? –

+0

對不起,這是一個嘗試: m = re.search(' - {100,}',elem,) x(1,len(m.groups(x)))....但是,不工作(我應該拿掉) – Nelly

+0

你知道' - {100,}'匹配100個連字符嗎?你想替換這些子字符串嗎? –

回答

1

你可以嘗試以下方法:

data = "ONE " + "-" * 100 + "atgtgca" + "-" * 20 
print re.sub(r'-{100,}', lambda x: '.' * len(x.group(0)), data) 

這將顯示:

ONE ....................................................................................................atgtgca-------------------- 
+0

...我不明白lambda x的用法嗎? – Nelly

+0

我認爲你沒有正確複製它,你有'X'和'x',它們需要是相同的。我建議你複製/粘貼屏幕。 –

+0

'lambda'只是用來作爲一種拋棄功能。它可以用一個單獨的功能替換。 –