如何使用正则表达式删除Hive中的连续单词/句子

时间:2017-06-15 02:45:22

标签: regex hive

我有一个字符串列,用于访问客户在访问期间访问的一系列页面。刷新页面时,相同的页面名称会连续重复。我想使用regexp_replace函数来识别和删除重复的页面。

示例: 主页,产品列表页面,产品列表页面,产品详情页面,评论页面,评论页面,产品列表页面,产品详细信息页面

预期输出: 主页,产品列表页面,产品详细信息页面,评论页面,产品列表页面,产品详细信息页面

我构建了以下正则表达式来标识单个页面名称 (\b([a-zA-Z]+)\b\s?)+但不确定如何在字符串中查找重复的页面并将其删除。

感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

您似乎只想删除用逗号分隔的连续相同的项目。

您可以使用基于正向前瞻的正则表达式capturing groupbackreference

select  regexp_replace
        (
            column_name
           ,'([^,]+),\\s*(?=\\1(?:,|$))'
           ,''
        )

from    mytable
;

请参阅regex demo

模式详情

  • ([^,]+) - 第1组捕获除,
  • 以外的1个字符
  • , - 逗号
  • \s* - 0+ whitespaces
  • (?=\\1(?:,|$)) - 一个积极的前瞻,确保在0+空格之后有与第1组中相同的文本,并且在该文本之后有一个,或字符串结尾,否则,它失败了。

此处,\1是对第1组中捕获的文本的反向引用。