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