【问题标题】:Hive regexp_replace failed to replace backslashHive regexp_replace 无法替换反斜杠
【发布时间】: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\"', '\\"', '"') 返回正确的结果。

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

【问题讨论】:

    标签: regex hive special-characters backslash regexp-replace


    【解决方案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 个字符 - 反斜杠和双引号

    【讨论】:

      猜你喜欢
      • 2012-04-14
      • 2012-06-16
      • 1970-01-01
      • 1970-01-01
      • 2014-09-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-10
      • 1970-01-01
      相关资源
      最近更新 更多