Python正则表达式模块模糊匹配:替换计数不如预期

时间:2015-07-02 20:07:00

标签: python regex mismatch dna-sequence fuzzy-comparison

python模块正则表达式允许模糊匹配

您可以指定允许的替换次数,s,插入次数,i,删除次数,d和总错误,e,允许

The fuzzy_counts 'option' returns a tuple (0,0,0), where: 
match.fuzzy_counts[0] = the counts for 's', 
match.fuzzy_counts[1] = counts for 'i' and 
match.fuzzy_counts[2] = counts for 'd'

删除和插入按预期计算,但不计入替换

在下面的示例中,唯一的更改是查询中单个字符已删除,但替换计数为6 (如果删除BESTMATCH选项,则为7)< / p>

如何计算替换?

我很感激有人能解释这对我有用吗

`import regex
reference = "(TATGGGA[CT][GC]AAAG[CT]CT[AC]AA[GA]CCATGTG){s<7,i<3,d<3,e<8}"
query = "TATGGACCAAAGTCTCAAGCCATGTG" 
match = regex.search(reference, query, regex.BESTMATCH)
print(match.fuzzy_counts)
(6,0,1)`

顺便说一句,match.fuzzy_counts可能是这篇文章之后的内容: Python "regex" module: Fuzziness value

2 个答案:

答案 0 :(得分:2)

此问题似乎与允许的错误设置中的值有关。

将s减少到s&lt; 3向下改变模糊匹配元组得分:

reference = "(TATGGGA[CT][GC]AAAG[CT]CT[AC]AA[GA]CCATGTG){s<3,i<3,d<3,e<4}" 
query = "TATGGACCAAAGTCTCAAGCCATGTG"  
match = regex.search(reference, query, regex.BESTMATCH)
print(match.fuzzy_counts) 
(1,0,1)

减少's'允许的错误甚至会进一步返回此匹配的预期's'分数:

reference = "(TATGGGA[CT][GC]AAAG[CT]CT[AC]AA[GA]CCATGTG){s<2,i<3,d<3,e<4}"
query = "TATGGACCAAAGTCTCAAGCCATGTG" 
match = regex.search(reference, query, regex.BESTMATCH)
print(match.fuzzy_counts)
(0,0,1)

为什么它以这种方式表现对我来说仍然是一个谜。

答案 1 :(得分:0)

这是由于regex模块的成本计算中的一个错误所致。它一直存在到正则表达式版本2015.10.05之前,但在下一版本2015.10.22中已得到修复,如下所示:

$ sudo pip3 install regex==2015.10.05
Processing /root/.cache/pip/wheels/24/cb/ae/9653e30c8f801544a645e17d26fa6803aeaf76ad0482663c27/regex-2015.10.5-cp38-cp38-linux_x86_64.whl
Installing collected packages: regex
Successfully installed regex-2015.10.5
$ python3 -c 'import regex; reference = "(TATGGGA[CT][GC]AAAG[CT]CT[AC]AA[GA]CCATGTG){s<7,i<3,d<3,e<8}"; query = "TATGGACCAAAGTCTCAAGCCATGTG"; match = regex.search(reference, query, regex.BESTMATCH);print(match.fuzzy_counts)'
(5, 0, 1)
$ sudo pip3 install regex==2015.10.22
Processing /root/.cache/pip/wheels/60/f6/9a/23e723633e62a79064cb301c54a3b50482b8c690f86c9983ee/regex-2015.10.22-cp38-cp38-linux_x86_64.whl
Installing collected packages: regex
  Found existing installation: regex 2015.10.5
    Uninstalling regex-2015.10.5:
      Successfully uninstalled regex-2015.10.5
Successfully installed regex-2015.10.22
$ python3 -c 'import regex; reference = "(TATGGGA[CT][GC]AAAG[CT]CT[AC]AA[GA]CCATGTG){s<7,i<3,d<3,e<8}"; query = "TATGGACCAAAGTCTCAAGCCATGTG"; match = regex.search(reference, query, regex.BESTMATCH);print(match.fuzzy_counts)'
(0, 0, 1)

鉴于这些日期,我推断修复该错误的提交是https://bitbucket.org/mrabarnett/mrab-regex/commits/296c1daf86619039c6fe55868e7d861097d01aae,并有说明

汞问题161:意外的模糊匹配结果

修复了该错误,并进行了一些相关的整理。

引用的错误是https://bitbucket.org/mrabarnett/mrab-regex/issues/161