给定一个文本文件,它看起来像这样:我一直在努力,想了许多不同的方式有弦Samsung Galaxy S6
不匹配Samsung Galaxy S6 edge
我怎样才能让我的Python字符串非贪婪地匹配?
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
,但似乎无法想出一个办法这样可行。在字符串中没有意义的地方是电话的名称已经结束,并且无关的信息开始了,所以将它们分开并与字典或类似的东西比较是行不通的。
我试图想一些办法来写:
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
也许
我不明白你的问题是什么。鉴于你所说的文本文件,你想做什么?你是否说你还得到了字符串“三星Galaxy S6”,并想看看它匹配哪条线?或者你想从每一行中提取电话名称? – BrenBarn
您可以使用负面预测:[**'Samsung Galaxy S6(?! edge)'**](https://regex101.com/r/U6kKYZ/1) – Jan
'如果sum(1 for phone in phones if电话线)== 1:'< - 检查是否有一种电话在线。 –