这是python代码-
import difflib
x = "abxcd"
y= "cdab"
s = difflib.SequenceMatcher(None, x, y)
for block in s.get_matching_blocks():
a=block[0:]
if a[2]>0:
m=a[0]
n=a[0]+a[2]
print (x[m:n])
它仅打印出“ ab”而忽略“ cd”。 但我希望它同时打印“ ab”和“ cd”。 有什么办法吗?
答案 0 :(得分:0)
看看get_matching_blocks()
的{{3}}
返回三元组的列表,描述不重叠的匹配子序列。每个三元组的形式为(i,j,n),表示a [i:i + n] == b [j:j + n]。 i和j中的三元组单调增加。
因此,根据您的输入"abxcd"
和"cdab"
,它将在位置2(从0开始)的“ cdab”中搜索“ a”,然后在位置“ 3”中搜索“ b”是第二个字符串的最后一个位置。到到达“ x”时,第二个字符串迭代已经完成。
>>> s=difflib.SequenceMatcher(None, "abxcd","cdab")
>>> s.get_matching_blocks()
[Match(a=0, b=2, size=2), Match(a=5, b=4, size=0)]
让我们再举一个例子,其中x="abxcd"
和y="abcd"
的结果将为ab, cd
。最初,它在位置0的'abcd'中搜索'a',在位置1中搜索'b',类似地在string2的位置2和3中搜索'c'和'd'
>>> s=difflib.SequenceMatcher(None, "abxcd","abcd")
>>> s.get_matching_blocks()
[Match(a=0, b=0, size=2), Match(a=3, b=2, size=2), Match(a=5, b=4, size=0)]