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

如何批量自动还原含星号审查文本?替代繁琐str.replace方案

解决方案:用正则+预定义字典批量还原审查词

当然可以,正则完全能解决这个问题,而且能一次性批量处理所有审查变体,不用写一堆重复的replace语句。

实现思路

核心是给每个需要还原的词生成通用正则模式,匹配所有用*(或其他替换符)替换任意字符的变体,再结合预定义字典批量替换。还能通过回调函数保留原文本的大小写格式,贴合原文语境。

代码示例

import re

# 定义需要还原的正确词(包含大小写、单复数变体)
target_words = {
    "bastard": "bastard",
    "Bastard": "Bastard",
    "bastards": "bastards",
    "Bastards": "Bastards"
}

# 生成正则匹配规则:匹配每个词的所有带*替换的变体
patterns = []
for correct_word in target_words.values():
    # 把每个字符转换成「原字符或任意数量*」的匹配单元
    char_patterns = [f'(?:\\*+|{re.escape(c)})' for c in correct_word.lower()]
    # 生成不区分大小写的正则对象
    pattern = re.compile(''.join(char_patterns), re.IGNORECASE)
    patterns.append((pattern, correct_word))

def restore_censored_text(text):
    for pattern, correct_word in patterns:
        # 回调函数:根据匹配文本的大小写返回对应格式的正确词
        def match_handler(match):
            matched = match.group(0)
            if matched.isupper():
                return correct_word.upper()
            elif matched.istitle():
                return correct_word.title()
            else:
                return correct_word.lower()
        text = pattern.sub(match_handler, text)
    return text

# 测试用例
test_text = "That b*st*rd yelled at me! Those B*stards are out of line."
print(restore_censored_text(test_text))
# 输出:That bastard yelled at me! Those Bastards are out of line.

扩展说明

  • 如果需要支持其他替换符(比如#、?),只需要把正则里的\\*+改成[\\*#?]+即可。
  • 如果要处理更多词汇,只需要在target_words里添加对应的正确词,不需要修改其他逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 05:46:10