我希望将所有可能的搜索匹配存储在数据库中,以便我可以远离执行LIKE %term%
查询。有没有办法拆分下面的字符串?
STRING = LG_THELASTWITCHHUNTER_PREORDERTRAILER_HD_2CH_EN_PTBRSUB_16X9_240_2398_DIGITAL_FINAL.mov
第一部分将在我们拆分子词的每个单词分隔符上。所以我们有:
SUBWORDS = 'LG', 'THELASTWITCHHUNTER', ...
第二部分将获得该单词的所有可能的连续字母组合。例如:
LG ==> 'L', 'G', 'LG
THELASTWITCHHUNTER ==> 'T', 'TH', 'THE', 'H', 'HE', 'HEL', etc.
有没有办法做到这一点,或者可能是我上面使用的更好的方法。要提供上下文,使用LIKE搜索需要大约15秒来处理我拥有的所有路径 -
最终目标是提取所有单词字符串。那就是:
LG, THE, LAST, WITCH, HUNTER, PREORDER, TRAILER, HD, 2CH, EN, PTBR, SUB, 16X8, 2398, DIGITAL, FINAL, MOV
答案 0 :(得分:2)
关于分解字符串,你可以使用
STRING.split('_')
获取所有子串:
title = 'cats'
substrings = {title[a:a+k] for k in range(1,1+len(title))
for a in range(1+len(title)-k)}
这给出了:
['c','a','t','s','ca','at','ts','cat','ats','cats']
对于长度为n的字符串,您将获得(n + 1)n / 2个非空子串。
编辑:更改为设置理解而不是列表理解以消除重复。对于孤独的标题,我们至少可以期待重复的单字母和双字母字符串,并且我们想要剔除唯一的子字符串。
答案 1 :(得分:1)
第1部分:分词
wordlist = string.split('_')
这假设您希望每个单词由_
第2部分:提取所有单词字符串
这可能是很多不同的词,所以我会小心记忆但是......
splitlist = []
for word in wordlist:
for i in range(len(word)):
for j in range(i+1,len(word)+1):
splitlist.append(word[i:j])
我建议检查以确保新添加的内容尚未包含在拆分列表中,但是这基本上就是你需要的“#/ p>