我正在使用Regex模块的“模糊匹配”功能。
如何获得“匹配”的“模糊值”,表示模式与字符串的不同,就像Levenshtein中的“编辑距离”一样?
我以为我可以在Match对象中获取值,但它不存在。官方文件也没有说明这一点。
e.g:
regex.match('(?:foo){e}','for')
a.captures()
告诉我“for”这个词是匹配的,但我想知道模糊值,在这种情况下应该是1
。
有没有办法实现这个目标?
答案 0 :(得分:1)
>>> import difflib
>>> matcher = difflib.SequenceMatcher(None, 'foo', 'for')
>>> sum(size for start, end, size in matcher.get_matching_blocks())
2
>>> max(map(len, ('foo', 'for'))) - _
1
>>>
>>>
>>> matcher = difflib.SequenceMatcher(None, 'foo', 'food')
>>> sum(size for start, end, size in matcher.get_matching_blocks())
3
>>> max(map(len, ('foo', 'food'))) - _
1
http://docs.python.org/2/library/difflib.html#difflib.SequenceMatcher.get_matching_blocks http://docs.python.org/2/library/difflib.html#difflib.SequenceMatcher.get_opcodes
答案 1 :(得分:0)
a = regex.match('(?:foo){e}','for')
a.fuzzy_counts
这将返回一个元组(x,y,z),其中:
x =替换次数
y =插入次数和
z =删除次数
但这并不总是一个可靠的计数,即:在某些情况下,正则表达式匹配模糊之夜不等于真正的莱文斯坦距离
Python regex module fuzzy match: substitution count not as expected