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
答案 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。