在字符串列表中找到最佳匹配

Find The Best Match In List of string

我有

target = "dexter.new.blood.S01EP07.somerandomstring.mkv"

我使用 split('.') 设法只得到了名字 成为

target = "dexternewblood"

list = ['Dexter - Eighth Season (2013)', 'Dexter - Seventh Season  (2012)', 'Dexter - Fourth Season (2009)', 'Dexter - Third Season (2008)', 'Dexter - Sixth Season (2011)', 'Dexter - Fifth Season (2010)', 'Dexter: New Blood - First Season (2021)', 'Dexter - First Season (2006)', 'Dexter - Second Season (2007)']

我做了同样的事情,结果是:

list = ['Dexter ', 'Dexter ', 'Dexter ', 'Dexter ', 'Dexter ', 'Dexter ', 'Dexter: New Blood ', 'Dexter ', 'Dexter ']

我想要最好的比赛是“Dexter:New Blood” 如果你也可以添加获取索引的方法

来自这个similar post you can use SequenceMatcher from difflib内置模块:

from difflib import SequenceMatcher

target = "dexternewblood"
lst = ['Dexter ', 'Dexter ', 'Dexter ', 'Dexter ', 'Dexter ', 'Dexter ', 'Dexter: New Blood ', 'Dexter ', 'Dexter ']

a = [SequenceMatcher(None, i, target).ratio() for i in lst]

index = a.index(max(a)) # 6
match = lst[index] # 'Dexter: New Blood '