我只是想检测一个字符串是否有子字符串,所以我可以删除它。所以我正在检测帖子中的单词并将它们存储到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语句。
答案 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)