如何使用re.sub遍历列表实现批量文本替换?
解决遍历wordList批量替换文本的问题
嘿,我看你遇到的问题是循环里只替换了列表第一个元素对吧?这是因为你的代码里有两个小问题:
- 循环时一直用
wordList[0]固定处理第一个元素,根本没用到循环变量word - 每次替换都是基于原始的
txt,没有把上一次替换的结果传递下去,导致之前的替换效果没被保留
咱们来修改一下代码,实现遍历所有元素的替换:
import re txt='affirmed and the affirmance and AFFIRMED and Affirm case' wordList = ['case', 'affirm\w+', '(ca\w+)'] # 先把out初始化为原始文本,后续替换都基于这个变量迭代 out = txt for word in wordList: # 用当前循环的word作为匹配规则,替换为空格,忽略大小写 out = re.sub(word, ' ', out, flags=re.I) print(out)
关键修改点说明:
- 初始化累积变量:把
out初始成原始的txt,这样每次替换都是在上一次替换后的结果上进行,保证所有规则都能生效 - 使用循环变量:循环里用
word代替wordList[0],这样就能依次处理列表里的每个匹配规则 - 修正flags参数:原来的代码把
re.I放在了count参数的位置(re.sub的第四个参数是count),这会导致只替换2次(因为re.I的值是2),现在改成flags=re.I,正确启用忽略大小写的匹配规则
运行这段代码后,所有在wordList里的规则都会被依次应用,把匹配到的内容替换成空格啦。
内容的提问来源于stack exchange,提问作者John Taylor
相关产品推荐
相关产品推荐

