2014-01-14 2 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 ошибки? (неудачная попытка, увиденная в комментариях)

Возможность использовать входные строки в качестве источника для регулярного выражения будет иметь решающее значение для любого действительно полезного сценария, который я имею в виду. (не так много автоматизации происходит иначе) Так что мне было бы приятно, если бы я мог 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') 

Если вы хотите построить шаблон регулярного выражения, вы должны будете использовать различные методы работы со строками для создания соответствующего шаблона для использования.