我一直试图替换一个可以出现在Hive中的列中的子字符串列表:"SA“、"DE”、"CV“、"MI”等。
我试图使用Hive中的regexp_replace
函数替换它们。为了测试它,我写下了以下查询:
select regexp_replace(company_name," DE | SA | CV ", " "), company_name from table limit 20;
我认为它可以解决所有的问题,但是接下来我得到了同样的输出:
ALCA DE CV ->>>>>>>>> ALCA DE CV
墨西哥德拉米纳克( ->>>>>>>> )
我也尝试在字符的开头和前面插入\s*,但是输出是相同的。有办法一次把它们全部替换掉吗?谢谢
发布于 2022-11-04 07:09:01
因为在regex参数之前和之后都有空格。请用这个
regexp_replace("MEXICANA DE SA LAMINACION SA CV "," DE| SA| CV", " ")
select regexp_replace(company_name," DE| SA| CV", " "), company_name from table limit 20;
请注意,我在争论后使用了一个空格。如果你有一个以DE或SA或CV开头的词会引起问题,我们可以单独处理它们。
为什么您的代码不工作-当您将“SA”替换为"ALCA“中的”SA“>这将变成"ALCA”.But,如果您考虑“SA ",请注意,字符DE在字符串之前没有空格。这就是为什么DE不会被取代的原因。而且简历后面没有空格,所以它不会被替换。因此,这意味着您将得到"ALCA简历“。
发布于 2022-11-07 11:34:39
要删除regex中出现的子字符串列表,我使用了下面的查询(尽管如果它发生在单词的末尾,但我的用例可以处理从单词末尾删除的子字符串)。
regexp_replace(concat(company_name, " "), "ABP\\s|AC\\s|AMBI\\s|AR\\s|CV\\s|DE\\s|EN\\s|ENR\\s|IAP\\s", " ")
https://stackoverflow.com/questions/74313155
复制相似问题