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 无法替换反斜杠的主要内容,如果未能解决你的问题,请参考以下文章