You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中使用正则表达式审查敏感词并替换中间字符为星号

实现敏感词部分替换为星号的方案

这个需求在内容审核场景里挺常见的,结合你已有的正则匹配规则,只需要给正则替换加个回调逻辑就能轻松搞定!核心思路是:匹配到敏感词后,保留首尾字符,中间的所有字符替换成对应数量的星号

具体实现(以Python为例)

假设你已经有了能精准匹配敏感词的正则pattern,我们可以用re.sub()的回调函数特性来处理每个匹配结果:

import re

def censor_sensitive_word(match_obj):
    # 获取匹配到的完整敏感词
    word = match_obj.group()
    # 短词(长度≤2)直接返回原词,避免过度替换反而显得突兀
    if len(word) <= 2:
        return word
    # 首字符 + 对应数量的中间星号 + 尾字符
    return word[0] + '*' * (len(word) - 2) + word[-1]

# 你的原始消息
original_message = "This is example message with bad words like FWORD"
# 替换敏感词(把下面的r'\bFWORD\b'换成你自己的正则pattern即可)
censored_message = re.sub(r'\bFWORD\b', censor_sensitive_word, original_message)

print(censored_message)
# 输出结果:This is example message with bad words like F***D

关键逻辑解释

  1. 回调函数处理匹配结果re.sub()的第二个参数可以传一个函数,这个函数会接收每个匹配到的对象,我们在函数里对敏感词做自定义替换逻辑。
  2. 短词特殊处理:如果敏感词只有2个字符(比如"fu"),替换成"f*u"反而可能更引人注意,所以直接返回原词更合理。
  3. 适配多敏感词场景:如果你的正则pattern是匹配多个敏感词(比如r'\b(FWORD|BADWORD|NASTY)\b'),这个方案完全适用,每个匹配到的词都会被自动处理。

其他语言的通用思路

不管用什么编程语言,核心逻辑都是一致的:

  • 用正则匹配所有目标敏感词
  • 对每个匹配到的词,执行「保留首尾字符+中间替换为星号」的操作
  • 将处理后的词替换回原文本

比如JavaScript的实现示例:

const originalMsg = "This is example message with bad words like FWORD";
const censoredMsg = originalMsg.replace(/\bFWORD\b/g, (word) => {
  if (word.length <= 2) return word;
  return word[0] + '*'.repeat(word.length - 2) + word.slice(-1);
});
console.log(censoredMsg); // 输出同样的脱敏结果

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

火山引擎 最新活动