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

MySQL正则匹配去除字符串重复单词:车辆库存表数据清洗需求

通用正则解决方案:MySQL中清理重复单词(含带前置内容的括号重复)

针对你提到的两种重复场景——直接连续重复、带括号且前置其他内容的重复,以下是适配MySQL的正则处理方案:

1. 处理带括号的重复单词(支持前置任意内容)

正则模式

(\b\w+\b)\s*\(\1\)

替换规则

将匹配到的内容替换为第一个捕获组 \1

SQL示例

-- 先查询验证结果,确认无误后再执行UPDATE
SELECT 
  make_model,
  REGEXP_REPLACE(make_model, '(\b\w+\b)\s*\(\1\)', '\1') AS cleaned_value
FROM vehicle_inventory
WHERE make_model REGEXP '(\b\w+\b)\s*\(\1\)';

-- 执行更新
UPDATE vehicle_inventory
SET make_model = REGEXP_REPLACE(make_model, '(\b\w+\b)\s*\(\1\)', '\1')
WHERE make_model REGEXP '(\b\w+\b)\s*\(\1\)';

模式解释

  • (\b\w+\b):捕获一个完整单词,\b 是单词边界,确保不会匹配单词的部分片段;\w+ 匹配字母、数字或下划线(如果单词包含连字符等特殊字符,可替换为 [\w-]+)
  • \s*:匹配括号前的0个或多个空格
  • \(\1\):匹配包裹在括号内的、与捕获组完全相同的单词,\1 是反向引用第一个捕获的内容

该模式会自动适配 MAKE NISSAN (NISSAN) 这类带前置内容的场景,将其转换为 MAKE NISSAN。

2. 处理直接连续重复的单词

正则模式

(\b\w+\b)\s+\1

替换规则

将匹配到的内容替换为第一个捕获组 \1

SQL示例

-- 先查询验证
SELECT 
  make_model,
  REGEXP_REPLACE(make_model, '(\b\w+\b)\s+\1', '\1', 1, 0) AS cleaned_value
FROM vehicle_inventory
WHERE make_model REGEXP '(\b\w+\b)\s+\1';

-- 执行全局更新(0表示替换所有匹配项)
UPDATE vehicle_inventory
SET make_model = REGEXP_REPLACE(make_model, '(\b\w+\b)\s+\1', '\1', 1, 0)
WHERE make_model REGEXP '(\b\w+\b)\s+\1';

模式解释

  • (\b\w+\b):捕获目标单词
  • \s+:匹配单词间的一个或多个空格
  • \1:匹配与捕获组相同的重复单词
  • 第四个参数 1 表示从第一个字符开始匹配,第五个参数 0 表示全局替换所有连续重复的实例(比如 FORD FORD FORD 会直接转换为 FORD)

注意事项

  • 仅支持MySQL 8.0及以上版本(低版本无内置 REGEXP_REPLACE 函数,需自定义函数或借助其他工具)
  • 若需忽略大小写匹配(比如 Ford ford),可在 REGEXP_REPLACE 末尾添加参数 'i',例如:REGEXP_REPLACE(make_model, '(\b\w+\b)\s+\1', '\1', 1, 0, 'i')
  • 处理前务必先通过 SELECT 验证替换结果,避免批量更新出错
  • 若单词包含特殊符号(如 .、/),需调整正则的字符匹配范围,例如将 \w+ 替换为 [A-Za-z0-9\-./]+

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 03:10:40