Регулярное выражение из текста - PullRequest
0 голосов
/ 14 апреля 2020

У меня всегда проблемы с регулярными выражениями:

Поэтому я сделал запрос с listagg:

Вывод:

21.09.2017 09:43  Status 8-2#Partner 0-178#EXP_date 24-2#EXP_interval 30-365#Partner_code template-0925584#amount 0-70#

21.11.2019 08:10  Status 8-2#Partner 0-178#EXP_date 24-0#EXP_interval 30-1#Partner_code template-0925805#

17.12.2019 10:23  Status 5-1#

Мне нужно регулярное выражение этот "текст" со значениями Status, 1#, 2#

regexp_like(my_column,'Status (1#|2#)')

Так что я хочу, чтобы все строки, где существует Status И ('1#' ИЛИ '2#') одновременно.

Какая правильная форма regexp_like?

Ответы [ 3 ]

2 голосов
/ 14 апреля 2020

Вы можете сократить чередование с | до класса символов .

Соответствовать пробелу после Status и затем использовать .*, чтобы добраться до соответствует 1 # или 2 #

Status .*[12]#

Regex demo

1 голос
/ 14 апреля 2020

Если вы хотите захватить до первого # , тогда используйте .+?, в противном случае используйте .* для последнего #

Status.+?(1|2)#

РЕГ. ДЕМО: https://regex101.com/r/15pvJz/5

Объяснение:

.+? соответствует любому символу ( за исключением ограничителей строки )

+? Квантификатор - Сопоставляется между один и неограниченно раз, как можно меньше, расширяясь по мере необходимости ( lazy )

1 голос
/ 14 апреля 2020

Рассмотрим:

regexp_like(my_column,'Status .*(1|2)#')

Проблема с вашим исходным регулярным выражением в том, что он ожидал '1#' или '2#' сразу после 'Status '. Добавление '.*' разрешает любую последовательность символов между ними.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...