2016-11-07 103 views
-2

我只是想檢測一個字符串是否有一個子字符串,所以我可以刪除它。所以我正在檢測帖子中的單詞並將它們存儲到m中。然後我想通過它們循環來檢測關鍵字。儘管如此,我還是無法使用它。值4-6只是字母和數字。檢測字符串是否有子字符串,並在Python中刪除元素

m = re.findall('some values from 4-6', submission.selftext) 
print(m) 
for x in m: 
    i = 0 
    if any("memory" or "hard" or "drive" in s for s in x): 
     del m[i] 
    i += 1 
print(m) 

但是,它似乎不起作用,當我嘗試搜索x。它完全跳過那個if語句,不管它是什麼。

+0

'任何( 「存儲器」 在S或S或 「硬」,「驅動器「在s中爲x)'可能是你需要的。 – Evert

+0

不知道你爲什麼重複遍歷'm',然後遍歷'x':'x'應該是一個包含你正在尋找的任何單詞的字符串。 '如果有(x中的「內存」或者x中的「hard」或者x中的「drive」)似乎更合理。 – Evert

+0

每次添加後都沒有改變結果。我迭代x因爲m可以包含['hard-drive','memory-card'],如果我只是遍歷m,它將使用整個字符串,而不僅僅是第一個元素x。哦,我明白你的意思了,我會試試看。 – Aero

回答

0

你有兩個問題:

if any("memory" or "hard" or "drive" in s for s in x): 

應該是:

if any("memory" in s or "hard" in s or "drive" in s for s in x): 

而你跳過一些i S:

來解決,這是通過使用列表理解的最好方式:

m = [x for x in m if not ("memory" in x or "hard" in x or "drive" in x)] 

你並不需要通過x迭代,因爲每個s將是一個性格,絕不會包含字符串memory

+0

這完全解決了我的問題。謝謝。 – Aero

0

你的問題並不完全清楚。我推斷:

  • 'some values from 4-6'是一個正則表達式包含組,例如, "(memory)|(hard)|(drive)"
  • submission.selftext是您正在搜索的文本。

然後,m是匹配的對象的列表,x匹配對象,s是以下基團之一,即,一個字。正確?

在這種情況下,您想要的測試是s in ["memory", "hard", "drive"]

您可以通過將正則表達式更改爲"memory|hard|drive"來改善此問題。然後m只是一個單詞列表。

我第二使用列表理解的建議:

m = [x for x in m if x not in ["memory", "hard", "drive"]] 

或者,使用filter功能:

m = filter(lamda x: x not in ["memory", "hard", "drive"], m) 
相關問題