python:SequenceMatcher 的示例
以下示例比较两个字符串,并将空格视为“垃圾”:
>>>
s = SequenceMatcher(lambda x: x == " ",
"private Thread currentThread;",
"private volatile Thread currentThread;")
ratio() 返回一个 [0, 1] 范围内的整数作为两个序列相似性的度量。 根据经验,ratio() 值超过 0.6 就意味着两个序列是近似匹配的:
>>>
print(round(s.ratio(), 3))
0.866
如果你只对两个序列相匹配的位置感兴趣,则 get_matching_blocks() 就很方便:
>>>
for block in s.get_matching_blocks():
print("a[%d] and b[%d] match for %d elements" % block)
a[0] and b[0] match for 8 elements
a[8] and b[17] match for 21 elements
a[29] and b[38] match for 0 elements
请注意 get_matching_blocks() 返回的最后一个元组总是只用于占位的 (len(a), len(b), 0),这也是元组末尾元素(匹配的元素数量)为 0 的唯一情况。
如果你想要知道如何将第一个序列转成第二个序列,可以使用 get_opcodes():
>>>
for opcode in s.get_opcodes():
print("%6s a[%d:%d] b[%d:%d]" % opcode)
equal a[0:8] b[0:8]
insert a[8:8] b[8:17]
equal a[8:29] b[17:38]