2015-08-13 4 views
1

У меня есть 19-символьная строка в Hive, что мне нужно разделить и удалить любые начальные нули.Regex ведущие нули из строки в Hive

Пример:

7212092180052740029 

мне нужно, чтобы разделить, как этот

721 20 9218 00527 40029 

Так что нет ни одного ведущие нули в 1-й, 2-й или 3-й секции, и 00 будут удалены из 4-го раздела; раздел 5 будет проигнорирован. Мой желаемый результат будет

721209218527 

Мое решение первого прохода является

trim(concat_ws('', regexp_replace(substr(some_string, 1, 3), '^0*', '') 
       , regexp_replace(substr(some_string, 4, 2), '^0*', '') 
       , regexp_replace(substr(some_string, 6, 4), '^0*', '') 
       , regexp_replace(substr(some_string, 10, 5), '^0*', ''))) 

, но это кажется крайней излишним. Любые идеи, как это сделать с помощью одной строки регулярного выражения?

Кроме того, следует отметить, что в любом из 5 разделов при разделении никогда не будет всех нулей (т. Е. Раздел 1 никогда не будет 000); если так, то мое «решение» не будет работать, так как все нулей будут ведущими, а '^0* ничего не вернет.

+0

что логика разделения – vks

+0

я решил, что было бы довольно очевидно, от вопроса. (3, 2, 4, 5, 5) – gobrewers14

+0

Я думаю, что это не – vks

ответ

1
^0*|(?<=^.{3})0*|(?<=^.{5})0*|(?<=^.{9})0*|(?<=^.{14}).*$ 

Вы можете использовать это регулярное выражение и заменить на empty string. См. Демонстрационную версию.

https://regex101.com/r/rO0yD8/15

+0

@ GoBrewers14 сделал эту работу? – vks

Смежные вопросы