2013-10-02 43 views
0

我想在python中做一個代碼,給定一個給定的字母表的正則表達式,會拿出類似自由度的所有可能的選擇。例如,如果我的字母表是ACTG(DNA核苷酸),並且我的正則表達式是[AG] CG(覆蓋ACG或GCG的正則表達式),我想要輸出[AC] CG(一個覆蓋ACG的正則表達式或CCG),[AT] CG(涵蓋ACG或TCG的正則表達式),[AG] CC等創建類似自由度的所有可能的組合

問題是,我對python或編程一般都很陌生,至今仍未弄清楚這樣做的方法。 最終目標是通過查看所有其他類似degenrate序列的出現的平均值是否確實小於給定字符串(DNA轉錄本)中的簡併序列(正則表達式)該特定簡併序列的出現次數。

感謝任何幫助或提示,

的Eyal

+0

看到這個問題:http://stackoverflow.com/questions/492716/reversing-a-regular-expression-in-python –

+0

那麼'[AG] * CG'呢?你打算如何處理有可能無限匹配的RegEx?使用發電機? – Hbcdev

回答

0

感謝您的意見,我設法爲特定的正則表達式手動做到這一點,現在(直到我提高我的Python技能)使用此代碼(正則表達式[AGT] [公司] AC [ACT):

import itertools 


def create_pots(): 
    af = [] 
    bf = [] 
    cf = [] 
    df = [] 
    ef = [] 
    gf = [] 
    a = list(itertools.combinations('AGCT', 3)) 
    b = list(itertools.combinations('AGCT', 2)) 
    c = list(itertools.combinations('AGCT', 1)) 
    d = list(itertools.combinations('AGCT', 1)) 
    e = list(itertools.combinations('AGCT', 3)) 
    for i in range(len(a)): 
     af.append('['+ ''.join(a[(i-1)]) + ']') 
    for i in range(len(b)): 
     bf.append('['+''.join(b[(i-1)])+']') 
    for i in range(len(c)): 
     cf.append(''.join(c[(i-1)])) 
    for i in range(len(d)): 
     df.append(''.join(d[(i-1)])) 
    for i in range(len(e)): 
     ef.append('['+''.join(e[(i-1)])+']') 
    g = list(itertools.product(af, bf, cf, df, ef)) 
    for i in range(len(g)): 
     gf.append(''.join(g[(i-1)])) 
    gf.remove('[AGT][AG]AC[ACT]') 
    return gf 

這將返回類似地雷的所有可能RegExs的列表,如:

gf = ['[ACT][GT]CC[ACT]', '[GCT][CT]TT[GCT]', '[GCT][CT]TT[AGC]', '[GCT][CT]TT[AGT]', '[GCT][CT]TT[ACT]', '[GCT][CT]TA[GCT]', '[GCT][CT]TA[AGC]', '[GCT][CT]TA[AGT]', '[GCT][CT]TA[ACT]', '[GCT][CT]TG[GCT]', '[GCT][CT]TG[AGC]', '[GCT][CT]TG[AGT]'....]