求助: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)。
新表达式的逻辑拆解
- 内层正则
"\b(\w+)\b(?<=.*\b\1\b)":\b(\w+)\b:匹配单个完整单词(?<=.*\b\1\b):反向预查,确保当前匹配的单词在之前的文本中已经出现过(即第二次及以后的重复词)- 匹配到的重复词会被替换为空字符串
- 中层正则
"\s+":把内层替换后产生的多个连续空格合并为单个空格 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
相关产品推荐
相关产品推荐

