Вы, вероятно, ищете что-то вроде этого:
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