2014-01-14 294 views
3

當我發現python regex模塊允許模糊匹配時,我越來越高興,因爲它似乎是解決我許多問題的簡單方法。 但現在我有一個問題,我沒有從文檔中找到任何答案。用Python正則表達式編譯模糊正則表達式

如何使用新的模糊值功能將字符串編譯爲正則表達式?

爲了說明我平時的需求,並給樣本的一小段代碼

import regex 
f = open('liner.fa', 'r') 
nosZ2f='TTCCGACTACCAAGGCAAATACTGCTTCTCGAC' 
nosZ2r='AGGTCACATCAACGTCAACG' 

#nini=regex.compile(nosZ2r{e<=3}) 

nimekiri=list(f) 
pikkus=len(nimekiri) 

count = 0 
while (count < pikkus): 
    line = nimekiri[count].rstrip('\n') 
    m=regex.findall("(TTCCGACTACCAAGGCAAATACTGCTTCTCGAC){e<=3}", line) 
    n=regex.findall("AGGTCACATCAACGTCAACG{e<=3}", line) 
    if bool(m) & bool(n): 
     print nimekiri[count-1].rstrip('\n') 
     print line 
    count = count + 1 

f.close() 

正如你所看到的正則表達式與fuzzyness的3個錯誤做工精細。但我不得不手動輸入整個字符串(nosZ2f/r)到findall中。 我無法編譯具有錯誤/模糊性值的正則表達式。

將字符串(行nosZ2f/r)轉換爲模糊性值爲3的正則表達式模式的正確語法是什麼? (在註釋行中看到的失敗嘗試)

使用輸入字符串作爲regexp的源的可能性對於我想到的任何實際有用的腳本都是至關重要的。 (沒有太多的自動化,否則) 所以它會很高興我,如果我可以frex。更換

m=regex.findall("(TTCCGACTACCAAGGCAAATACTGCTTCTCGAC){e<=3}", line) 

m=regex.findall(nini, line) etc. 

或者

m=regex.findall("string{e<=3}", line) 

回答

2

您需要正確一起把你的字符串。

import regex 
testString = 'some phrase' 
r = regex.compile('('+testString+'){e<=5}') 
r.match('phrase') 

如果你想建立一個正則表達式模式,你需要使用各種字符串操作技術來建立合適的模式來使用。