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

正则表达式问题:re.I修饰符未生效,无法忽略大小写移除指定单词

问题分析与解决

哦,这个坑我之前也踩过!你遇到的问题是re.sub的参数顺序搞错了,导致re.I(大小写不敏感)修饰符根本没生效。

问题根源

先看re.sub的官方参数定义:

re.sub(pattern, repl, string, count=0, flags=0)

第四个参数是count(指定替换次数,默认0表示全部替换),第五个才是flags(正则标志位)。你原代码里把re.I放在第四个位置,Python会把它当成count=1来处理——意思是只替换1次匹配项,完全没启用大小写不敏感的规则!这就是为什么只有小写开头的affirmed、affirmance被替换,而AFFIRMED、Affirm没被处理。

修正方案

只需要把re.I放到正确的位置,或者更稳妥的是用关键字参数flags=re.I,这样就不会搞混顺序了:

修正后的代码

import re
txt='affirmed and the affirmance and AFFIRMED and Affirm case'
wordList = ['affirm\w+', '(ca\w+)']
for word in wordList:
    # 用关键字参数指定flags,清晰不易错
    txt = re.sub(word, '', txt, flags=re.I)
print(txt)

输出结果

and the and  and 

(注:因为第二个正则ca\w+匹配了case,所以case也被移除了,如果不需要移除它可以从wordList里删掉)

额外小建议

  • 当不需要指定count时,优先用关键字参数flags=xxx,避免参数顺序混淆;
  • 如果确实需要指定替换次数,比如只替换2次,可以这么写:
    txt = re.sub(word, '', txt, count=2, flags=re.I)
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:44:55