Если вы хотите, чтобы регулярное выражение, которое вы можете использовать '\([^(]*\)$'
- то есть, (экранирование) открывающиеся скобки, любое количество любого другой символ, закрывающая скобка - и $, чтобы он соответствовал только концу строки. Вероятно, есть более простой способ сделать это не жадным матчем.
with t(input) as (
select 'SURGICAL INC (SKUMAR) (1058585_BI_SF)' from dual
union all select 'MEDICAL, ABC(854567_BI_SF)' from dual
)
select input, regexp_substr(input, '\([^(]*\)$') as output
from t;
INPUT OUTPUT
------------------------------------- -------------------------------------
SURGICAL INC (SKUMAR) (1058585_BI_SF) (1058585_BI_SF)
MEDICAL, ABC(854567_BI_SF) (854567_BI_SF)
Тогда вам просто нужно удалить круглые скобки из этого значения, если вы этого не хотите. Вы можете использовать вложенные replace
вызовы, но если вы решили придерживаться регулярных выражений, вы можете использовать regexp_replace()
, чтобы избавиться от обоих сразу:
with t(input) as (
select 'SURGICAL INC (SKUMAR) (1058585_BI_SF)' from dual
union all select 'MEDICAL, ABC(854567_BI_SF)' from dual
)
select input,
regexp_replace(regexp_substr(input, '\([^(]*\)$'), '[()]', null) as output
from t;
INPUT OUTPUT
------------------------------------- --------------------
SURGICAL INC (SKUMAR) (1058585_BI_SF) 1058585_BI_SF
MEDICAL, ABC(854567_BI_SF) 854567_BI_SF
Регулярные выражения могут быть более дорогими, чем простые инструменты, хотя.
Можете ли вы уточнить цель, которую хотите извлечь? Является ли цель какой-либо в последней паре круглых скобок? – kdbanman
Некоторые детали, на которые всегда будут выглядеть входные строки, тоже помогают. Всегда ли будет хотя бы одна пара открытых/закрытых круглых скобок? Будет ли что-нибудь после последней закрывающей скобки? – kdbanman