Hive regexp_replace 无法替换反斜杠

Posted

技术标签:

【中文标题】Hive regexp_replace 无法替换反斜杠【英文标题】:Hive regexp_replace failed to replace backslash 【发布时间】:2020-04-11 18:48:17 【问题描述】:

我有一个单列name_string 的表,其中包含反斜杠字符。我想使用regexp_replace 删除反斜杠字符,但它不起作用。

表:

create table t (name_string varchar(100));
insert into table t values ('\\"aaa\\"'), ('\\"bbb\\"'); 

查询:

select 
   name_string, regexp_replace(name_string, '\\"', '"')
from  t; 

返回

+--------------+----------+
| name_string  |   _c1    |
+--------------+----------+
| \"aaa\"      | \"aaa\"  |
| \"bbb\"      | \"bbb\"  |
+--------------+----------+

但是,select regexp_replace('\"aaa\"', '\\"', '"') 返回正确的结果。

我很困惑为什么会出现这种情况。有人可以解释一下吗?欣赏!

【问题讨论】:

【参考方案1】:

使用 4 个反斜杠:

select regexp_replace(name_string,'\\\\"','"') from t; 

只有反斜杠需要转义。在 Java 和正则表达式中,反斜杠具有特殊含义,需要转义。

【讨论】:

我想将单斜杠替换为双斜杠,我正在尝试以下操作,但它没有按预期工作。你能帮忙创建表测试(s1字符串)插入测试(s1)值('/')插入测试(s1)值('ab')插入测试(s1)值('\\')选择s1 , regexp_replace(s1, '//','\\\\\\\\\\\\\\') 来自测试;【参考方案2】:

不妨试试:

select 
   name_string, regexp_replace(name_string, '\\\"', '"')
from  t; 

我认为这是关于转义 - 你转义 2 个字符 - 反斜杠和双引号

【讨论】:

以上是关于Hive regexp_replace 无法替换反斜杠的主要内容,如果未能解决你的问题,请参考以下文章

hive函数REGEXP_REPLACE用法

hive函数REGEXP_REPLACE用法

hive函数REGEXP_REPLACE用法

hive中 regexp_replace的用法,替换特殊字符问题

hive替换文件中特殊字符

如何在 Hive 中使用 regexp_replace() 一次删除多个字符?