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

求助:Tableau正则表达式去除非相邻重复词

在Tableau中移除Product字段的重复词(支持非相邻场景)

解决方案计算字段

直接使用嵌套正则替换结合TRIM处理多余空格,计算字段表达式如下:

TRIM(REGEXP_REPLACE(REGEXP_REPLACE([Product], "\b(\w+)\b(?<=.*\b\1\b)", ""), "\s+", " "))

效果验证

  • 原字段值:Blue Blue Car → 处理后:Blue Car
  • 原字段值:Wild Yellow Wild Yellow Ball → 处理后:Wild Yellow Ball

为什么原来的表达式失效?

你之前用的REGEXP_REPLACE([Product], "(\b\w+\b)(?=\s+\b\1\b)", "")仅匹配相邻且紧跟的重复词,它通过正向预查(?=\s+\b\1\b)限定了重复词必须在当前词的下一个位置,无法识别间隔其他词汇的重复项(比如示例中的第二个Wild和Yellow)。

新表达式的逻辑拆解

  1. 内层正则"\b(\w+)\b(?<=.*\b\1\b)":
    • \b(\w+)\b:匹配单个完整单词
    • (?<=.*\b\1\b):反向预查,确保当前匹配的单词在之前的文本中已经出现过(即第二次及以后的重复词)
    • 匹配到的重复词会被替换为空字符串
  2. 中层正则"\s+":把内层替换后产生的多个连续空格合并为单个空格
  3. TRIM():移除字段首尾可能残留的空格

注意事项

如果你的Product字段包含连字符、下划线等特殊字符(比如Red-White Red-White Bike),需要调整单词匹配的正则规则,将\w替换为[\w-](根据实际特殊字符调整),示例:

TRIM(REGEXP_REPLACE(REGEXP_REPLACE([Product], "\b([\w-]+)\b(?<=.*\b\1\b)", ""), "\s+", " "))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 02:56:23