regex 删除sql中带有起始和结束字符的重复项

ds97pgxw  于 2023-04-13  发布在  其他
关注(0)|答案(1)|浏览(121)

我有一个字符串,需要删除重复的选择语句在ORACLE SQL。例如:'apple-HenryHenry(Male)-SunnySunny(Female)-apple'我想得到的输出是:'苹果-亨利(男)-桑尼(女)-苹果'大家帮帮我

SELECT REGEXP_REPLACE('apple-HenryHenry(Male)-SunnySunny(Female)-apple', '([[:alnum:]]+)(\1)+', '\1') AS result
  FROM dual;
5us2dqdw

5us2dqdw1#

你的查询基本上是正确的,但是它会从单词中删除双字母,单词的重复部分(比如banana-〉bana)。
你可以用这样的东西

SELECT REGEXP_REPLACE('apple-HenryHenry(Male)-SunnySunny(Female)-apple', '(^|\W)(\w+)\2+(\W|$)', '\1\2\3') AS result
  FROM dual;

这里(^|\W)(\w+)\2+(\W|$)匹配由非单词符号或字符串边界包围的单词,这些单词由两个或更多相等的部分组成。
这并不理想,因为它会修改haha-〉ha。如果保证重复单词的两个部分都以大写字母开头,可以使用(^|\W)([A-Z]\w*)\2+(\W|$)

SELECT REGEXP_REPLACE('bananabanana-HenryHenry(Male)-SunnySunny(Female)-apple', '(^|\W)([A-Z]\w*)\2+(\W|$)', '\1\2\3') AS result
  FROM dual;
-- Outputs: bananabanana-Henry(Male)-Sunny(Female)-apple

相关问题