假设我的程序接收到一个输入,例如具有任何类型字符的字符串。例如,“鲍勃的百吉饼店”。然后它得到另一个字符串,上面写着“Fred's Bagel Store”。如何在 python 中使用正则表达式或其他模块来比较这些并让我的程序告诉我字符串中的任何位置是否至少有 5 个(或我想要的任何数字)字符相同,但顺序相同,比如“Bagel”这个词?
谢谢。
假设我的程序接收到一个输入,例如具有任何类型字符的字符串。例如,“鲍勃的百吉饼店”。然后它得到另一个字符串,上面写着“Fred's Bagel Store”。如何在 python 中使用正则表达式或其他模块来比较这些并让我的程序告诉我字符串中的任何位置是否至少有 5 个(或我想要的任何数字)字符相同,但顺序相同,比如“Bagel”这个词?
谢谢。
有一个 Python 标准库类difflib.SequenceMatcher
可以帮助解决您的问题。这是一个代码示例:
from difflib import SequenceMatcher
s1 = "Bob's Bagel Shop"
s2 = "Bill's Bagel Shop"
matcher = SequenceMatcher(a=s1, b=s2)
match = matcher.find_longest_match(0, len(s1), 0, len(s2))
结果:
Match(a=3, b=4, size=13) # value that 'match' variable holds
结果表明,两个字符串都有相同的子字符串,长度为 13 个字符(从第一个字符串中的第 3 个字符和第二个字符串中的第 4 个字符开始)。
您可以使用此匹配结果对象将其字段作为值获取:
match.size # 13
match.a # 3
match.b # 4
您可以使用itetools.combinations
然后使用intersection
集合从两个字符串中找出匹配的字符:
from itertools import combinations
str1="Bob's Bagel Shop"
str2="Fred's Bagel Store"
def combi(strs):
chars=''.join(strs.split())
lis=[]
for x in range(1,len(chars)):
for y in combinations(chars,x):
if ''.join(y) in chars:
lis.append(''.join(y))
return lis
lis1=combi(str1)
lis2=combi(str2)
print max(set(lis1).intersection(set(lis2)),key=len)
输出:
'sBagelS