给定一个如下所示的文本文件:
Samsung Galaxy S6 active SM-G890A 32GB Camo White (AT&T) *AS-IS* Cracked Screen
Samsung Galaxy S6 SM-G920 - 32GB - White Verizon Cracked screen
Samsung Galaxy S6 edge as is cracked screen
我试图想出许多不同的方法来使字符串 Samsung Galaxy S6 与 Samsung Galaxy S6 edge 不匹配,但似乎无法实现想出一个可行的方法。字符串中没有任何意义表明电话名称已经结束并且无关信息开始,因此以这种方式将它们分开并与字典或类似的东西进行比较是行不通的。
我试图想出一些方法来编写以下内容:
phones = ['Samsung Galaxy S6', 'Samsung Galaxy S6 Edge']
lines = open('phones.txt', 'r').readlines()
for line in lines:
for phone in phones:
if phone in line and no other phone in phones is in line:
print('match found')
但我想不出构建它的正确方法 - 谁有任何想法?我确定我在这里遗漏了一些简单的东西,但就是想不通是什么。
请您参考如下方法:
首先对您的手机进行排序,以便按长度查看它们
phones.sort(key=len,reverse=True)
然后当你找到匹配时中断
for phone in phones:
if phone in line:
print "FOUND:",repr(phone),"IN",repr(line)
break # we dont need to keep looking for other phones in this line
也许吧?
这样“Samsung Galaxy s6 Edge”在您的支票中出现在“Samsung Galaxy”之前,您将匹配最长的一个...不需要像正则表达式答案那样了解您的电话列表的更多信息
