2017-02-20 5 views
1

私は、ハイブで特定の方法でラクダの弦を隙間を空けることを試みています。隣接する大文字は、1つが他の英数字に通じない限り、ブロックとして残ります。この場合、大文字は、次の英数字の文字列を持つブロック内にあります。ハイブのregexpグループ間にスペースを追加するにはどうすればよいですか?

たとえば、HELLOWorldHELLO Worldになります。 HelloWorld5Hello World5になります。 HELLOWorldPeopleHELLO World Peopleになります。場合によっては文字列全体が小文字になります。すべての文字列の後にSTRINGが続くため、HelloWorldSTRINGになりますが、最後の部分は破棄する必要があります。

これは私が私が正しくグループに言葉を分割で作品をと思うが、私は間違っている可能性があること書かれている正規表現です:

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

はハイブ内のすべてのグループの間にスペースを挿入する方法はありますか? regexp_replaceはこの問題には向いていないと思われます。

答えて

2

先行するすべての大文字/後に大文字以外の何かをスペースとそれ自身で置き換えます。

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

更新された応答を確認します。 –

0

これは私が思ったよりも実際に簡単です。私は言葉自体ではなく、言葉の間のスペースを選択する必要がありました。

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

同じです。 OPの例に対してテストする必要があります。 –

+0

@DuduMarkovitzこれはOPの回答です) –

+0

: - )))...)...) –

関連する問題