Python使用re.sub替换敏感词未全部生效,如何修改代码修复?
禁用词替换代码修复方案
原有代码存在的问题
- 文件读取逻辑错误:
readline()方法仅能读取文件的第一行内容,待处理的文本文件存在多行内容时,除第一行外的所有内容都会丢失,自然无法完成对应替换,这是替换不全的核心原因。 - 正则模式未做特殊字符转义:如果后续禁用词新增包含
.、*这类正则保留字符的内容,会直接导致匹配逻辑异常。
修复后的代码
import re with open("forbidden_words.txt", "r", encoding="utf-8") as stop, open(f'{input()}', 'r', encoding='utf-8') as file: # 读取禁用词文件全部内容后拆分 stop_words = stop.read().strip().split(" ") # 读取待处理文件的全部内容,保留原有换行、格式 text_file = file.read() for i in stop_words: # 转义禁用词中的正则特殊字符后再替换 text_file = re.sub(re.escape(i), '*'*len(i), text_file, flags=re.IGNORECASE) print(text_file)
可选优化
如果要求仅匹配独立的完整禁用词,不替换其他单词内嵌的禁用词子串(比如不需要把helloworld里的hello替换成*****),可以将正则规则调整为带单词边界匹配的格式:
text_file = re.sub(rf'\b{re.escape(i)}\b', '*'*len(i), text_file, flags=re.IGNORECASE)
内容的提问来源于stack exchange,提问作者pankazimierz
相关产品推荐
相关产品推荐

