Impala Regex: сопоставить строку между символами a и b (если b существует) - PullRequest
0 голосов
/ 06 ноября 2018

Я пытаюсь написать регулярное выражение, используя Impala, чтобы сопоставить строку между двумя символами, где второй символ может отсутствовать. Например, я хочу сопоставить все между символом @ и . (если существует оператор точки).

  • test @ mytest.stackoverflow.com -> return mytest
  • test @ mytest -> return mytest

Я написал следующее регулярное выражение, и оно работает, но я думаю, что оно определенно могло бы быть написано более понятным способом.

regexp_extract(regexp_extract('test @ mytest.stackoverflow.com', '^([^.]*).*', 1), '@(.*?)', 1) -> mytest

1 Ответ

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

Попробуйте использовать следующий шаблон, который помещает текст, который вы хотите сопоставить внутри группы захвата:

@([^.]*)[.]?

SELECT
    REGEXP_EXTRACT('test @ mytest.stackoverflow.com', '@([^.]*)[.]?', 1) AS result
FROM yourTable;

Вот демонстрация, показывающая регулярное выражение в действии:

Демо

...