如何在配置单元中的regexp组之间添加空格?

von4xj4u  于 2021-06-26  发布在  Hive
关注(0)|答案(2)|浏览(369)

我正在尝试以一种特定的方式在hive中分隔camel大小写字符串。任何相邻的大写字母都保持为一个块,除非其中一个字母指向其他字母数字字符,在这种情况下,大写字母位于具有以下字母数字字符串的块中。
例如, HELLOWorld 应该变成 HELLO World . HelloWorld5 应该变成 Hello World5 . HELLOWorldPeople 应该变成 HELLO World People . 有时整个字符串都是小写的。每个字符串后面都跟有 STRING 是的 HelloWorldSTRING ,但最后一部分应该丢弃。
这是我写的正则表达式,我认为它能正确地将单词分组,但我可能错了:

([A-Z]?[a-z0-9]+)+STRING|([A-Z]*)([A-Z][a-z0-9]+)*STRING

有没有办法在Hive中的每个群体之间插入一个空格?据我所知,regexp\u replace似乎不适合这个问题

uelo1irk

uelo1irk1#

将每个大写字母前面/后面都替换为除大写字母以外的其他字母,用空格和空格本身。

hive> select regexp_replace('ThisIsHELLOWorldPeople','(?<=[^A-Z])[A-Z]|[A-Z](?=[^A-Z])',' $0');
OK
 This Is HELLO World People
fruv7luv

fruv7luv2#

这其实比我想象的要简单。我需要选择单词之间的空格,而不是单词本身。

regexp_replace(regexp_extract(string_col, "(.*)STRING"), 
           "(?<=[A-Za-z])()(?=([A-Z][a-z]))", 
           " ")

相关问题