首页 > 解决方案 > 在 Hive 中用空替换单引号(')

问题描述

我有一个功能来替换不同类型的字符,如下所示。

CAST(TRANSLATE(REGEXP_REPLACE(UPPER(number),' |,|-|/|&|_|''''',''),'.|(|)','') as string) as number

一切工作正常,除了 ''''' 部分,我想用任何内容替换单引号/撇号。

例子:

TYLER'SCOFFEE should come out as TYLERSCOFFEE

我检查了这个论坛的示例,似乎我们可以使用反斜杠来实现上述目标,但是当我使用下面这样的反斜杠时,它会引发错误。

select CAST(TRANSLATE(REGEXP_REPLACE('TYLER\'SCOFFEE',' |,|-|/|&|_|'\'',''),'.|(|)','') as string) as number;
Error: Error while compiling statement: FAILED: ParseException line 1:68 character '\' not supported here (state=42000,code=40000)

有人可以帮我解决我的问题吗?谢谢。

标签: regexhivespecial-charactershiveqlregexp-replace

解决方案


使用双引号正则表达式。在双引号内,单引号被屏蔽:

select 'TYLER\'SCOFFEE' as original_str, regexp_replace('TYLER\'SCOFFEE',"'",'') result;

结果:

original_str    result
TYLER'SCOFFEE   TYLERSCOFFEE

此外,如果您需要用相同的替换替换许多不同的字符,请将它们全部放入[],无需使用 pipe |

select regexp_replace('TYLER\'SCOFFEE ,-/&_', 
                      "[ ,-/&_']", 
                      '')

结果:

TYLERSCOFFEE

推荐阅读