You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

列表推导式报TypeError:如何正确结合re.sub与带条件的re.findall?

解决列表推导式中的TypeError问题

嘿,我来帮你搞定这个报错!先说说你为啥会遇到这个TypeError:

你写的re.findall(r'content_name', i, re.M)会返回一个列表——如果找到匹配项,就是匹配到的字符串组成的列表;没找到就是空列表。而你用not in i去判断这个列表是否在字符串i里,这显然不对,因为in操作符要求左边必须是字符串(或者单个可迭代元素),不能拿整个列表和字符串比,这就触发了错误。

你的需求应该是:当字符串i中不存在content_name这个匹配内容时,才对i执行re.sub替换,对吧?给你两种正确的写法:

方法1:用re.search更高效

re.search会在字符串中查找第一个匹配项,找到就返回匹配对象,没找到返回None,用它来判断存在性更高效:

import re
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)]

这里not re.search(...)就表示“没找到content_name匹配”,符合你的条件逻辑。

方法2:如果一定要用re.findall

可以判断re.findall返回的列表是否为空(空列表在布尔判断中是False):

import re
new_list = [re.sub(r'in_content_1', r'in_content_2', i) for i in foo_list if not re.findall(r'content_name', i, re.M)]

当re.findall没找到匹配时,返回空列表,not 空列表结果为True,就会执行替换操作。

小提示

如果你的content_name正则模式里没有用到^或$(行首/行尾匹配),那re.M(多行模式)其实可以去掉,不会影响结果哦。

内容的提问来源于stack exchange,提问作者faber

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:25:10