2014-01-14 289 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') 

如果你想建立一个正则表达式模式,你需要使用各种字符串操作技术来建立合适的模式来使用。