私のプログラムが、任意のタイプの文字を含む文字列などの入力を受け取ったとしましょう。たとえば、「ボブのベーグル ショップ」です。次に、「Fred's Bagel Store」という別の文字列を取得します。Pythonで正規表現または他のモジュールを使用してこれらを比較し、プログラムに少なくとも5つ(または必要な数)の文字が文字列内のどこでも同じであるが、すべて同じ順序であるかどうかを教えてもらうにはどうすればよいですか? 「ベーグル」という言葉など?
ありがとう。
私のプログラムが、任意のタイプの文字を含む文字列などの入力を受け取ったとしましょう。たとえば、「ボブのベーグル ショップ」です。次に、「Fred's Bagel Store」という別の文字列を取得します。Pythonで正規表現または他のモジュールを使用してこれらを比較し、プログラムに少なくとも5つ(または必要な数)の文字が文字列内のどこでも同じであるが、すべて同じ順序であるかどうかを教えてもらうにはどうすればよいですか? 「ベーグル」という言葉など?
ありがとう。
difflib.SequenceMatcher
問題の解決に役立つPython 標準ライブラリ クラスがあります。コードサンプルは次のとおりです。
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 番目の文字から始まり、2 番目の文字列の 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
見る
または simhash モジュールをチェックアウトします。