gpt4 book ai didi

python difflib print 仅匹配两个字符串之间的部分

转载 作者:行者123 更新时间:2023-12-01 09:17:46 26 4
gpt4 key购买 nike

我对 python 完全陌生,我需要一些关于 difflib 的帮助。我尝试阅读文档,但对我来说理解文档并不容易。

我想比较两个字符串,并且我希望输出仅是两个字符串之间的匹配前缀部分(不打印差异)。

示例:

t1 = "hello my name is Tom" 
t2 = "hello his name is Sawyer"

预期输出为:“hello”

我尝试了以下方法,但输出不是我想要的,因为它将输出打印为数组,并且不仅打印匹配部分:

#!/usr/bin/python

import difflib
t1 = "hello my name is Tom"
t2 = "hello his name is Sawyer"
seq = difflib.Differ()
seq = seq.compare(t1,t2)
print list(seq)

其他示例2:

t1 = "20180628-153020"
t2 = "20180628-173020"

预期输出打印输出:“20180628-1”后缀“3020”即使字符串的两部分都匹配位置和字符,也应该被忽略。

请帮助我..谢谢...

更新2018/07/02

我编写了一段小代码来仅获取两个字符串之间前缀的相似部分(不使用 takewhile 作为 @Eugene 的第一个答案),但我认为答案中 @Eugene 编写的第二个代码比我的更短、更高效。这是我的代码:

def getprefix(s1, s2):
pref = ""
ls1 = list(s1)
ls2 = list(s2)
i=0
while i < len(ls1):
if ls1[i] not in ls2[i]:
return pref
pref += ls1[i]
i += 1

最佳答案

In [1]: from itertools import takewhile
In [2]: ''.join(a for (a, b) in takewhile(lambda (a, b): a == b, zip(t1, t2)))
Out[2]: '20180628-1'

在这里,我们将两个字符串压缩在一起,并在它们的前缀相等时对其进行迭代。

更新。不使用itertools的等效解决方案:

result = []
for a, b in zip(t1, t2):
if a != b:
break
result.append(a)
return ''.join(result)

关于python difflib print 仅匹配两个字符串之间的部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51086052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com