HIVE - удаление всего между определенными персонажами

У меня есть несколько путей в виде строк, которые я хотел бы очистить и сделать более аккуратными.

Пример строк:
Строка 1: /keywordOneA/keywordTwoA/393r-mr49-j5n65_9e8e77g77b8
Строка 2: /keywordOneA/keywordTwoA/111-4444-jjjj_1b1b1b1b1b1b1b
Строка 3: /keywordOneA/keywordTwoB/393r-mr49-j5n65_9e8e77g77b8/keywordThreeA

Я хочу, чтобы они уступили:
Строка 1: /keywordOneA/keywordTwoA/
Строка 2: /keywordOneA/keywordTwoA/
Строка 3: /keywordOneA/keywordTwoB/keywordThreeA

В основном, пока это просто ПИСЬМА между /.../ Затем я хочу сохранить эти ключевые слова, в противном случае я хочу удалить их. Это возможно как-то?

Также возможно сделать это пошагово, используя WITHпункт.

Это то, что я придумал, но начинаю застрять

select regexp_replace('/keywordonea/keywordtwob/393r-mr49 j5n65_9e8e77g77b8/keywordthreea','[0-9\/_.,!?-]','');

1 ответ

Решение

Я думаю, что это будет делать то, что вы хотите:

select regexp_replace(val, '/[^/]*[^a-zA-Z0-9/][^/]*', '')

У меня нет Hive под рукой, но это работает в Oracle.

Это регулярное выражение ищет символы после косой черты. Эти символы не являются косыми чертами, и по крайней мере один из них должен быть не буквенно-цифровым. Поскольку регулярные выражения по умолчанию являются жадными, это будет соответствовать символам до следующей косой черты или до конца строки.

Другие вопросы по тегам