Python敏感词屏蔽函数问题:保留原输入大小写实现等长星号替换
解决禁用词替换时保留原始大小写的问题
原代码的问题在于将整个输入字符串转为小写后再进行替换,导致最终返回结果全部是小写,无法保留原始输入的大小写格式。要解决这个问题,我们可以使用正则表达式实现不区分大小写的匹配,同时直接在原字符串上进行替换,保留非禁用词部分的原始大小写。
修改后的实现代码
import re def censure(sent): bad = ('whatever', 'bad', 'word', 'you', 'can', 'think', 'of') # 构建正则模式:匹配任意禁用词,带单词边界避免部分匹配,忽略大小写 pattern = re.compile(r'\b(' + '|'.join(bad) + r')\b', re.IGNORECASE) # 替换匹配到的内容为等长星号 return pattern.sub(lambda match: '*' * len(match.group()), sent) chat = input('Type text with bad words:\n') print(censure(chat))
关键说明
- 单词边界
\b:确保只匹配完整的禁用词,不会误替换包含禁用词的其他单词(比如不会把badly里的bad替换掉)。 re.IGNORECASE标志:让正则匹配时不区分大小写,不管输入的禁用词是Bad、BAD还是bad都能被识别。- lambda替换函数:通过
match.group()获取匹配到的原始内容(保留原大小写),生成对应长度的星号进行替换,既完成屏蔽又保留了原字符串的格式。
测试示例
输入:Whatever you think, this is a Bad word!
输出:******** **** ***** this is a *** ****!
内容的提问来源于stack exchange,提问作者AntiLis
相关产品推荐
相关产品推荐

