Извлечь подстроку с помощью регулярного выражения в Oracle - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть это выражение

(CONJ|ADL|ALD|ALM|ATR|VRD)(.)*{1,6}(TERPLN|SUITE|AGP|ALM|PT|$)

Чтобы извлечь из

CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20 

Мне нужно извлечь 'VRD LOS ARBOLES PT', но с возвратом REGEXP_SUBSTR 'VRD LOS ARBOLES PT 20 '

Пожалуйста, помогитеменя с этим

REGEXP_SUBSTR('CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20','(CONJ|ADL|ALD|ALM|ATR|VRD)(.)*{1,6}(TERPLN|SUITE|AGP|ALM|PT|$)' )

1 Ответ

0 голосов
/ 06 декабря 2018

Вы, вероятно, ищете что-то вроде этого:

with
  inputs as (
    select 'CL 18 A SUR 29 C 80 VRD LOS ARBOLES PT 20' address from dual
  )
select regexp_substr(address, 
       '(CONJ|ADL|ALD|ALM|ATR|VRD).*?(TERPLN|SUITE|AGP|ALM|PT|$)') token
from   inputs
;

TOKEN
---------------------
VRD LOS ARBOLES PT

Ключ кроется в чередовании - .*? в этом случае.

Однако, имейте в виду, что это опасный подход - что, если название улицы (или что-то еще) действительно содержит подстроку PT в ней?

VRD COMPTON VALLEY

поиск вернет VRDCOMPT

, и проблема связана с вашей моделью данных, а не с конкретным запросом, который вы используете для таких данных.Возможно, вы можете потребовать, чтобы перед окончательным чередованием было место;но даже тогда вы получите неправильные ответы при вводе, например

VRD GARDEN OF PTOLEMY

...