以下列表理解返回TypeError: 'in <string>' requires string as left operand, not list
。
new_list = [re.sub(r'in_content_1', r'in_content_2', i) for i in foo_list if re.findall(r'content_name', i, re.M) not in i]
在列表推导中使用re.sub和条件re.findall的正确方法是什么?
答案 0 :(得分:0)
我认为你的错误在if语句中;实际上
re.findall(r'content_name', i, re.M)
返回&#34; content_name&#34;的列表建立在 i 变量中。您可以更改以下行:
new_list = [re.sub(r'in_content_1', r'in_content_2', i) for i in old_list if 'content_name' not in i]
根据@chrisz的建议,我在 old_list 中更改了名称 list
答案 1 :(得分:0)
re.findall()
返回所有匹配的list
。如果没有找到,它将返回一个空的list
,因此将始终为list
。因此,if re.finall(...) not in i
部分评估为if <list> not in <string>
,这就是您看到错误的原因。
您可以使用re.search()
做同样的事情。
new_list = [re.sub(r'in_content_1', r'in_content_2', i) for i in foo_list if not re.search(r'content_name', i, re.M)]