2016-11-07 88 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) 
相关问题