将 Oracle 正则表达式转换为 HIVE

Convert Oracle Regex to HIVE

我需要将下面的正则表达式(它在 Oracle 中运行良好)转换为 HIVE。正则表达式模式删除所有标点符号,除了('-' 和 '&' 撇号和空格)。

    select
       REGEXP_REPLACE (          
        TRANSLATE(
                    REGEXP_REPLACE( 'UNI''C...ER - BÉBI,,, DAS DE PORTUGAL, SGPS, S.A.', '[^[:alnum:] &-]', '' ),
                    'ÁÇÉÍÓÚÀÈÌÒÙÂÊÎÔÛÃÕËÜáçéíóúàèìòùâêîôûãõëü', 'ACEIOUAEIOUAEIOUAOEUaceiouaeiouaeiouaoeu'
                 ),
                    ' {2,}', ' ') SSS

from dual;

问题出在输出上:

  1. Oracle 输出:“UNICER - BEBIDAS DE PORTUGAL SGPS SA”
  2. HIVE 输出:“UNIC...ER - BEBI, DAS DE PORTUGAL, SGPS, S.A。” (保留“.”和“,”)

我认为问题在于 [[:alnum:]] POSIX 字符 Class 解释。

非常感谢。

您可以使用

'[^\p{L}\p{N} &-]'

此正则表达式匹配任何不是的单个字符([^...] 是否定字符 class)

  • \p{L} - 任何 Unicode 字母
  • \p{N} - 任何 Unicode 数字
  • - 一个space
  • & - 一个 & 字符
  • - - 一个 - 字符。