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

如何用Java正则表达式去除句子中所有重复单词?

去除句子中所有重复单词的解决方案

你当前使用的正则\b(\w+)(?:\W+\1\b)+仅能匹配连续重复的单词,因为它是在捕获的单词后查找紧跟的重复项,无法处理非连续的重复实例(比如示例中第三个have)。要实现删除所有重复单词(保留首次出现的),需要结合代码逻辑跟踪已出现的单词,以下是具体实现:

通用解决方案(多数编程语言适用)

正则本身无状态,无法记忆已匹配过的单词,因此需要借助替换函数或数组过滤逻辑记录已保留的单词,只保留每个单词的首次出现:

Python 示例

import re

def remove_duplicates(sentence):
    seen = set()
    def replace(match):
        word = match.group(1)
        if word not in seen:
            seen.add(word)
            return word
        return ''
    # 匹配所有单词,替换重复项为空
    cleaned = re.sub(r'\b(\w+)\b', replace, sentence)
    # 清理多余空格并修剪首尾
    return re.sub(r'\s+', ' ', cleaned).strip()

# 测试
test_sentence = "I have have a nice have car"
print(remove_duplicates(test_sentence))  # 输出: I have a nice car

JavaScript 示例

function removeDuplicateWords(sentence) {
    const seen = new Set();
    return sentence.split(/\s+/)
        .filter(word => {
            if (!seen.has(word)) {
                seen.add(word);
                return true;
            }
            return false;
        })
        .join(' ');
}

// 测试
const testSentence = "I have have a nice have car";
console.log(removeDuplicateWords(testSentence)); // 输出: I have a nice car

注意事项

  • 上述方案会保留单词的首次出现顺序,删除后续所有重复项;
  • 如果需要忽略大小写差异(比如不区分Have和have),可以在添加到集合前统一转换为小写(或大写),同步调整匹配逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 05:03:21