【问题标题】:Convert Oracle Regex to HIVE将 Oracle 正则表达式转换为 HIVE
【发布时间】:2022-01-04 17:40:23
【问题描述】:

我需要将下面在 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 字符类解释。

非常感谢。

【问题讨论】:

    标签: regex hive


    【解决方案1】:

    你可以使用

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

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

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

    【讨论】:

    • 非常感谢。我会测试并给你反馈。
    • @LEOPOLDO 在 Hive 中,确保双转义反斜杠,如果您在任何正则表达式测试器中测试正则表达式,请使用单个反斜杠,请参阅 this regex demo。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-02
    • 2016-04-02
    • 1970-01-01
    • 2019-05-11
    • 2014-11-08
    • 2017-12-29
    • 2023-03-09
    相关资源
    最近更新 更多