我有一个字符串列,用于访问客户在访问期间访问的一系列页面。刷新页面时,相同的页面名称会连续重复。我想使用regexp_replace函数来识别和删除重复的页面。
示例: 主页,产品列表页面,产品列表页面,产品详情页面,评论页面,评论页面,产品列表页面,产品详细信息页面
预期输出: 主页,产品列表页面,产品详细信息页面,评论页面,产品列表页面,产品详细信息页面
我构建了以下正则表达式来标识单个页面名称
(\b([a-zA-Z]+)\b\s?)+
但不确定如何在字符串中查找重复的页面并将其删除。
感谢任何帮助!
答案 0 :(得分:1)
您似乎只想删除用逗号分隔的连续相同的项目。
您可以使用基于正向前瞻的正则表达式capturing group和backreference。
select regexp_replace
(
column_name
,'([^,]+),\\s*(?=\\1(?:,|$))'
,''
)
from mytable
;
请参阅regex demo。
模式详情:
([^,]+)
- 第1组捕获除,
,
- 逗号\s*
- 0+ whitespaces (?=\\1(?:,|$))
- 一个积极的前瞻,确保在0+空格之后有与第1组中相同的文本,并且在该文本之后有一个,
或字符串结尾,否则,它失败了。此处,\1
是对第1组中捕获的文本的反向引用。