我试图在蜂巢中以特定的方式分隔驼峰案例字符串。任何相邻的大写字母都保留为一个块,除非其中一个大写字母带有其他字母数字字符,在这种情况下,大写字母位于带有以下字母数字字符串的块中。
例如,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_replace似乎不适合这个问题,只要我能够告诉
答案 0 :(得分:2)
替换除大写字母以外的其他内容之后/之后的每个大写字母,并用空格本身。
hive> select regexp_replace('ThisIsHELLOWorldPeople','(?<=[^A-Z])[A-Z]|[A-Z](?=[^A-Z])',' $0');
OK
This Is HELLO World People
答案 1 :(得分:0)
这实际上比我想象的要简单。我需要选择单词之间的空格,而不是单词本身。
regexp_replace(regexp_extract(string_col, "(.*)STRING"),
"(?<=[A-Za-z])()(?=([A-Z][a-z]))",
" ")