用于删除重复项的 Tableau 正则表达式计算

Tableau Regex calculation to remove duplicate

提问人:Zr1219 提问时间:10/20/2023 最后编辑:Mathias R. JessenZr1219 更新时间:10/20/2023 访问量:71

问:

我在 Tableau 中使用一个名为“产品”的字段,这些产品中的每一个都有产品名称和颜色。例如,“Blue Blue Car”或“Wild Yellow Wild Yellow Ball”。我的问题是我需要在它们的第二个实例中删除重复的单词。所以我希望上面的内容使用正则表达式变成“Blue Car”和“Wild Yellow Ball”,有人可以帮我吗?

我试过这个:

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

但它只有在它们彼此相邻时才会删除重复项,因此“Blue Blue Car”被固定为“Blue Car”,但它不会修复“Wild Yellow Wild Yellow Ball”,因为它们彼此不相邻

tableau-api 则表达式组 正则表达式替换

评论

0赞 Poul Bak 10/20/2023
替换为 .\s+.+
0赞 Zr1219 10/20/2023
感谢您的帮助,它删除了该单词的第一次出现,如果我希望它是已删除的单词的第二次出现,我该怎么做?例如,如果我有“红色火车红色”,我希望它读作“红色火车”而不是“红色火车”。谢谢
0赞 Poul Bak 10/20/2023
我不确定 Tableau 是否可能做到这一点。
0赞 Zr1219 10/20/2023
我认为画面准备可能能够处理它,所以我会尝试把它带到那里!除非你也知道答案

答:

2赞 sln 10/20/2023 #1

可以这样做

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

替换为捕获组 1

https://regex101.com/r/Gbem1L/1

(                             # (1 start)
   \b \w+ 
   (?: \s+ \w+ )*
   \b 
)                             # (1 end)
\s+ 
\1 \b

如果正则表达式语言中有可用的原子组,
则可以使用它来加速正则表达式。

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

https://regex101.com/r/0xMVUn/1

评论

1赞 Cary Swoveland 10/20/2023
我们俩都误解了这个问题。(请参阅OP对我的回答的评论。您可以将您的(第一个)正则表达式推广为(并且仍然将匹配替换为 ),但我不知道 OP 是否会对其中的含义感到满意。演示((\b\w+(?:\s+\w+)*\b)(?:\s+\w+)*)\s+\2\b$1
1赞 Cary Swoveland 10/20/2023 #2

我不明白“在第二个实例中删除重复单词”是什么意思。

如果重复的字符串彼此相邻(例如,),而不是有中间文本的情况(例如,),则删除哪个重复字符串(例如,的第一个实例或最后一个实例)并不重要,这意味着我们可以用空字符串替换以下正则表达式的匹配项:"Wild Yellow Wild Yellow Ball""Wild Yellow Dog Wild Yellow Ball""Wild Yellow "

\b((?:\w+ +)+)(?=\1)

演示

请注意,可以有任意数量的重复字符串;除一个外,其他所有字符串都将替换为空字符串。例如,将变成 ."Blue Blue Blue Blue Blue Car""Blue Car"

正则表达式包含以下元素:

\b         # match a word boundary
(          # begin capture group 1
  (?:      # begin a non-capture group
    \w+ +  # match >= 1 word characters followed by >= 1 spaces
  )+       # end the non-capture group and execute it >= 1 times
)          # end capture group 1
(?=\1)     # positive lookahead asserts that the contents of capture
           # group 1 follow 

评论

0赞 Zr1219 10/20/2023
嘿 Cary,我的意思是删除重复单词的第二个实例而不是第一个实例是......假设我有“Blue Car Blue”,我希望它变成 Blue Car 而不是 Car Blue,以便它与已设置的字段格式的其余部分相匹配。如果这没有意义,我可以为你提供更多的例子!
0赞 Cary Swoveland 10/20/2023
更多示例会有所帮助,但您应该编辑您的问题并将它们添加到那里,而不是在评论中详细说明。您可以考虑的两个例子是“蓝色汽车蓝色”(案例问题)和“她看到蓝色汽车蓝色驶入湖中”。在后一种情况下,第一个重复的词是“the”,所以我想你想要,“她看到蓝色的汽车蓝色驶入湖中”。正确?虽然示例有助于说明,但您还需要澄清您对问题的陈述。我的答案是无法修复的,所以我将删除它。
1赞 sln 10/21/2023
@Zr1219 - -> 引入了一个不连贯的匹配序列,该序列将匹配推进到中间文本之外,以删除最终的 .这是没有规定的。Car 是搜索第二个时多个文本子字符串的占位符。要替换尾部,必须写回中间部分。这样一来,比赛位置就刚刚过去了。我希望这不会太令人困惑。即使第一次遍历字符串替换了一些文本,您也无法从头开始重新执行所有操作,因为字符串的配置已更改。有益的?Blue Car BlueBlue CarCarBlueBlueBlueCarCar