4

我正在使用Regex模块的“模糊匹配”功能。

如何获得“匹配”的“模糊值”,它指示模式与字符串的不同程度,就像 Levenshtein 中的“编辑距离”一样?

我以为我可以在 Match 对象中获得值,但它不存在。官方文档也没说什么。

例如:

regex.match('(?:foo){e}','for')

a.captures()告诉我“for”这个词是匹配的,但我想知道模糊值,1在这种情况下应该是。

有没有办法做到这一点?

4

2 回答 2

2
>>> 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

于 2013-06-10T13:05:22.797 回答
0
a = regex.match('(?:foo){e}','for')
a.fuzzy_counts 

这将返回一个元组 (x,y,z),其中:

x = 替换次数

y = 插入次数和

z = 删除数

但这并不总是一个可靠的计数,即:在某些情况下,正则表达式匹配模糊之夜不等于真正的莱文斯坦距离

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

于 2016-07-08T15:07:30.360 回答