6

假设我的程序接收到一个输入,例如具有任何类型字符的字符串。例如,“鲍勃的百吉饼店”。然后它得到另一个字符串,上面写着“Fred's Bagel Store”。如何在 python 中使用正则表达式或其他模块来比较这些并让我的程序告诉我字符串中的任何位置是否至少有 5 个(或我想要的任何数字)字符相同顺序相同,比如“Bagel”这个词?

谢谢。

4

3 回答 3

13

有一个 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
于 2012-08-12T18:24:14.950 回答
1

您可以使用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
于 2012-08-12T18:35:16.423 回答
0

Python中的字符串相似度度量

或签出 simhash 模块:

http://bibliographie-trac.ub.rub.de/browser/simhash.py

于 2012-08-12T18:21:20.423 回答