提问人:Zr1219 提问时间:10/20/2023 最后编辑:Mathias R. JessenZr1219 更新时间:10/20/2023 访问量:71
用于删除重复项的 Tableau 正则表达式计算
Tableau Regex calculation to remove duplicate
问:
我在 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”,因为它们彼此不相邻
答:
可以这样做
(\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
评论
((\b\w+(?:\s+\w+)*\b)(?:\s+\w+)*)\s+\2\b
$1
我不明白“在第二个实例中删除重复单词”是什么意思。
如果重复的字符串彼此相邻(例如,),而不是有中间文本的情况(例如,),则删除哪个重复字符串(例如,的第一个实例或最后一个实例)并不重要,这意味着我们可以用空字符串替换以下正则表达式的匹配项:"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
评论
Blue Car Blue
Blue Car
Car
Blue
Blue
Blue
Car
Car
评论
\s+
.+