ограничение количества символов в регулярном выражении - PullRequest
0 голосов
/ 19 сентября 2019

Я занимаюсь поиском текстовых полей для таких терминов, как домашние роды, доставка на дом и т. Д. И т. Д. У меня есть код ниже, который в основном работает.Тем не менее, как я могу ограничить количество символов, чтобы ограничить количество ложных срабатываний, которые я могу получить?

Я бы хотел строки 1 и 2, но не 3. Я хочу ограничить количество символов в выражении regexp_like до 10 или 20, чтобы я мог получать доставку на дом или доставку на дом.

with test (id, col) as
  (select 1, 'abc 3/4/16 blah blah home  delivery'                          from dual union all
   select 2, 'abc 3/4/16 blah blah 3/7/16 delivery at home xxx cc2'         from dual union all
   select 3, 'xxx 3/5/18 delivery 234 imp happened on 5/8/19 sent home 23f' from dual union all
   select 4, '3/10/18 bla bla imp-3/9/17 xfe 334 3/4/13 x'                  from dual
  )
select * from test 
where     regexp_like(col,'(home|deliver).*(deliv|birth|home)') ;

Спасибо-

1 Ответ

0 голосов
/ 20 сентября 2019

Если вы в остальном удовлетворены полученными совпадениями и производительностью,
вы можете ограничить длину промежуточных символов между группой home|deliver и deliv|birth|home, заменив неограниченный .* на длинуограниченное сопоставление любых символов.

Вы можете указать допустимую максимальную длину и минимальную длину промежуточных символов в строке.
Ниже приведен пример, который допускает от 0 до 30 символов между группами.

WITH TEST (ID , COL) AS
    (SELECT 1, 'abc 3/4/16 blah blah home  delivery' FROM DUAL UNION ALL
     SELECT 2, 'abc 3/4/16 blah blah 3/7/16 delivery at home xxx cc2' FROM DUAL UNION ALL
     SELECT 3, 'xxx 3/5/18 delivery 234 imp happened on 5/8/19 sent home 23f' FROM DUAL UNION ALL
     SELECT 4, '3/10/18 bla bla imp-3/9/17 xfe 334 3/4/13 x' FROM DUAL)
SELECT *
FROM TEST
WHERE REGEXP_LIKE(COL , '(home|deliver).{0,30}(deliv|birth|home)');

Результат:

   ID                                                     COL
_____ _______________________________________________________
    1 abc 3/4/16 blah blah home  delivery
    2 abc 3/4/16 blah blah 3/7/16 delivery at home xxx cc2


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