如何使用Python regex删除字符串中指定的重复单词
正则移除指定单词的重复项实现方案
核心逻辑
你需要的是仅删除指定单词的所有重复项、保留第一次出现的该单词,同时不影响其他单词的重复状态,正则匹配的核心是定位目标单词第一次出现之后的所有同名单词及其前置分隔符,直接删除这部分内容即可。
支持可变长度后视的环境实现(Python/Java9+/ES2018+等)
这是最简洁的实现方式,直接通过后视断言确认目标单词已经出现过,再匹配后续的重复项:
- 正则表达式模板:
(?<='{目标单词}'.*)',\s+'{目标单词}' - 以目标单词为
hi为例,实际正则为:(?<='hi'.*)',\s+'hi' - 操作:将匹配到的内容替换为空字符串即可得到预期结果。
Python代码示例:
import re original = "'hi', 'what', 'are', 'are', 'what', 'hi'" target = "hi" # 转义目标单词避免特殊字符影响正则匹配 pattern = re.compile(fr"(?<='{re.escape(target)}'.*)',\s+'{re.escape(target)}'") res = pattern.sub("", original) print(res) # 输出:'hi', 'what', 'are', 'are', 'what'
不支持可变长度后视的环境实现(旧版JS等)
可以结合正则全局匹配和计数逻辑实现:
const original = "'hi', 'what', 'are', 'are', 'what', 'hi'"; const target = "hi"; let appearCount = 0; let res = original.replace(new RegExp(`'${target}'`, 'g'), match => { appearCount++; // 仅保留第一次出现的目标单词 return appearCount === 1 ? match : ''; // 清理删除后产生的多余逗号 }).replace(/,\s*,/g, ','); console.log(res); // 输出:'hi', 'what', 'are', 'are', 'what'
注意事项
- 动态拼接正则时必须对目标单词做转义处理,避免目标单词包含
.、*、+等正则特殊字符时匹配异常 - 如果需要保留目标单词的最后一次出现而非第一次,只需要调整匹配逻辑:先匹配所有前置的重复目标单词,删除即可
内容的提问来源于stack exchange,提问作者Shamim Mahbub
相关产品推荐
相关产品推荐

