Hive regexp_extract возвращает NULL - PullRequest
0 голосов
/ 29 ноября 2018

Относительно новое в мире регулярных выражений, поэтому, пожалуйста, потерпите меня.Я пытаюсь использовать regexp_extract для извлечения определенного подмножества данных в строке, но он возвращает мне NULL для регулярного выражения, которое я сейчас пытаюсь использовать.

Требование следующее: -

String -> test = 1233 ] 3212] -> Extract 1233

String -> test = 123355 -> 123355

Идея состоит в том, чтобы извлечь все данные после test = до первого] ​​или до конца строки.

Регулярное выражение, которое я имею на данный момент, которое я пытаюсь использовать с помощью regexp_extract Hive, -> test=(.*?)]|.*

select regexp_extract('test=1233]','test=(.*?)]|.*',1);
--1233 (CORRECT)

select regexp_extract('test=1233]323]','test=(.*?)]|.*',1);
--1233 (CORRECT)

select regexp_extract('test=1233323abc','test=(.*?)]|.*',1);
--NULL (Should return 1233323abc)

Буду признателен за ваши предложения.Я на полпути в этот момент: (

1 Ответ

0 голосов
/ 29 ноября 2018

Вы можете использовать

regexp_extract(col,'test=([^\\]]+)',1);

Кажется, здесь уместнее использовать regexp_replace, так как вы хотите получить весь ввод при отсутствии совпадения.

Вы можете использовать

regexp_replace(col, ".*?test=([0-9a-zA-Z]+).*", "$1")

См. Демонстрационный пример regex .

Регулярное выражение будет соответствовать всей строке и удалит весь текст, кроме 1 или более букв и цифр после test= подстроки илибудет возвращен весь ввод.

Если могут быть какие-либо символы, кроме ], используйте

regexp_replace(col, ".*?test=([^\\]]+).*", "$1")

См. еще одну демонстрацию регулярных выражений .

...