假设我们有一个35000值的python列表,如:
a = ['235', '2589', '25896']
和要匹配的字符串:
str = '258963548'
str2 = '258954213'
str3 = '258659652'
现在我想将这些字符串与列表匹配以找到最长匹配。第一个字符串的结果将是25896,而第二个匹配将返回2589,最后一个字符串将无法匹配。
我使用正则表达式来解决这个问题,但是我需要很长时间,因为我有大约50组列表和大约200个字符串来匹配每个列表。
这是我的代码:
def Matchit(str,b = []):
pattern = re.compile("(?P<mt>\S*)\S*\s+(?P=mt)")
ln = 0
res = -1
for a in b:
match = pattern.match(str + ' ' + a).group('mt')
if (len(match)>ln):
ln = len(match)
if(ln>2):
res = b[a]
return res
任何帮助将不胜感激。
答案 0 :(得分:4)
您可以从列表中构建trie。那么你应该能够很快找到最长的匹配
答案 1 :(得分:2)
为什么不按顺序对列表进行排序,然后第一个匹配将是最长的。这样您就不必每次迭代都完成了。