将 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;
问题出在输出上:
- Oracle 输出:“UNICER - BEBIDAS DE PORTUGAL SGPS SA”
- 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
&
- 一个 &
字符
-
- 一个 -
字符。
我需要将下面的正则表达式(它在 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;
问题出在输出上:
- Oracle 输出:“UNICER - BEBIDAS DE PORTUGAL SGPS SA”
- HIVE 输出:“UNIC...ER - BEBI, DAS DE PORTUGAL, SGPS, S.A。” (保留“.”和“,”)
我认为问题在于 [[:alnum:]] POSIX 字符 Class 解释。
非常感谢。
您可以使用
'[^\p{L}\p{N} &-]'
此正则表达式匹配任何不是的单个字符([^...]
是否定字符 class)
\p{L}
- 任何 Unicode 字母\p{N}
- 任何 Unicode 数字&
- 一个&
字符-
- 一个-
字符。