检测字符串是否在Python中具有子字符串和删除元素

时间:2016-11-07 03:12:42

标签: python python-3.x

我只是想检测一个字符串是否有子字符串,所以我可以删除它。所以我正在检测帖子中的单词并将它们存储到m中。然后我想循环遍历它们以检测关键字。我不能让它工作。值4-6只是字母和数字。

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时似乎无效。无论m是什么,它都会跳过if语句。

2 个答案:

答案 0 :(得分: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

解决此问题的最佳方法是使用列表解析:

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

您不需要遍历x,因为每个s都是一个字符,并且永远不会包含字符串memory

答案 1 :(得分: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)