Hive - 从字符串中删除子字符串

Posted

技术标签:

【中文标题】Hive - 从字符串中删除子字符串【英文标题】:Hive - Remove substring from string 【发布时间】:2016-02-27 09:11:15 【问题描述】:

我需要用空字符串替换给定字符串中的子字符串,子字符串出现在字符串的不同位置。

我想从这些可能的字符串组合中删除"fruit":"apple",并期望得到相应的字符串:

"client":"web","fruit":"apple"   --> "client":"web"
"fruit":"apple","client":"web"   --> "client":"web"
"client":"web","fruit":"apple","version":"v1.0" --> "client":"web","version":"v1.0"
"fruit":"apple"   -->  null or empty string

我使用了regexp_replace(str, "\,*\"fruit\"\:\"apple\"", ""),但这并没有让我得到预期的结果。构造正则表达式的正确方法是什么?

【问题讨论】:

唯一的问题是, 后面的"fruit":"apple" ? 解码为 json,删除然后再次编码 【参考方案1】:

您似乎正在处理 JSON 格式的数据。根据包含的依赖项,您可以完全不使用正则表达式来实现它。

例如,如果您使用的是 Google 的 lib Gson,那么您可以将 String 解析为 JsonObject,然后从中删除属性

String input = "your data";
JsonParser parser = new JsonParser();
JsonObject o = parser.parse(input).getAsJsonObject();

try 
   String foundValue = o.getAsJsonPrimitive("fruit").getAsString();
   if ("apple".equals(foundValue)) 
      o.remove("fruit");
   
 catch (Exception e) 
  e.printStackTrace();

String filteredData = o.toJSONString();

附:代码不是最终版本,它可能需要处理某些情况(当没有这样的字段,或者它包含非原始值时),需要进一步的细节来覆盖它

附言IMO,在这种情况下使用正则表达式会降低代码的可读性和灵活性

【讨论】:

以上是关于Hive - 从字符串中删除子字符串的主要内容,如果未能解决你的问题,请参考以下文章

PB中取字符串子串的函数是啥

使用 Python 的字符串子序列内核和 SVM

华为OD机试真题Java实现判断字符串子序列真题+解题思路+代码(2022&2023)

2022华为机试真题 C++ 实现 字符串子序列II

如何更改python字符串子字符串信息

[在python中使用正则表达式搜索字符串子字符串