給定一個文本文件,它看起來像這樣:我一直在努力,想了許多不同的方式有弦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:'< - 檢查是否有一種電話在線。 –