【发布时间】:2016-11-18 20:16:35
【问题描述】:
给定一个看起来像这样的文本文件:
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')
但我想不出正确的结构方式 - 有人有什么想法吗?我确定我在这里遗漏了一些简单的东西,但就是不知道是什么。
【问题讨论】:
-
我不明白你的问题是什么。给定你说的文本文件,你想做什么?你是说你也得到了字符串“Samsung Galaxy S6”并想看看它匹配哪些行?或者您想从每一行中提取电话名称?
-
您可以使用负前瞻:
Samsung Galaxy S6(?! edge) -
if sum(1 for phone in phones if phone in line) == 1: -
@BrenBarn 理想情况下,我想从给定电话名称列表的不同字符串中从每行中提取电话名称。我遇到的问题是“Samsung Galaxy S6”之类的字符串与“Samsung Galaxy S6”、“Samsung Galaxy S6 Edge”等行匹配。
-
您还可以按长度对电话名称列表进行排序,名称较长的在前,这样当您匹配它们时,您就知道如果一个匹配不再匹配。
标签: python string string-matching