Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 Помощь с регулярными выражениями. Обрезать строку по разделителю '_'  [new]
Balbesco
Guest
Есть строки вида
aprv_17374_1
xxxrv_37374_1
xxxrv_27374_21
Необходимо удалить последнее подчеркивание и все символы после него.
Т.е. привести к виду
aprv_17374
xxxrv_37374
xxxrv_27374

Пока придумал, что-то типа regexp_replace(txt, '([[:alnum:]]+)_([[:alnum:]]+)_([[:alnum:]]+)', '\1_\2') ss
Т.е.
WITH
ts
AS(
SELECT 'aprv_17374_1'   txt from dual
UNION ALL
SELECT  'xxxrv_37374_1'  from dual
UNION ALL
SELECT  'xxxrv_27374_21'  from dual

)
SELECT t.*,
regexp_replace(txt, '([[:alnum:]]+)_([[:alnum:]]+)_([[:alnum:]]+)', '\1_\2') ss
from ts t;


Но хотелось бы что-то более универсальное просто отсекающее с конца строки
6 июн 16, 00:29    [19260741]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с регулярными выражениями. Обрезать строку по разделителю '_'  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Balbesco,

для этой задачи не нужны регулярки:
SQL> with x as (
2 select 'aprv-17374-1' a from dual union all
3 select '_aprv-17374-1' from dual union all
4 select '_aprv-17374-1_' from dual union all
5 select 'aprv_17374_1' from dual union all
6 select 'xxxrv_37374_1' from dual union all
7 select 'xxxrv_27374_21' from dual
8 )
9 select case instr(a, '_', -1) when 0 then a else substr(a, 1, instr(a, '_', -1) - 1) end b from x;
B
--------------
aprv-17374-1

_aprv-17374-1
aprv_17374
xxxrv_37374
xxxrv_27374

6 rows selected.
6 июн 16, 01:14    [19260771]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с регулярными выражениями. Обрезать строку по разделителю '_'  [new]
Elic
Member

Откуда:
Сообщений: 29979
Balbesco
Но хотелось бы что-то более универсальное просто отсекающее с конца строки
'_[^_]*$'
6 июн 16, 08:03    [19260896]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с регулярными выражениями. Обрезать строку по разделителю '_'  [new]
Balbesco
Guest
--Eugene--,

Спасибо за ответ. Да, просто и со вкусом :) Хотел таки в кои веки регуляркой воспользоваться
6 июн 16, 08:45    [19260954]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с регулярными выражениями. Обрезать строку по разделителю '_'  [new]
Balbesco
Guest
Elic,

Спасибо за ответ!
6 июн 16, 08:45    [19260957]     Ответить | Цитировать Сообщить модератору
 Re: Помощь с регулярными выражениями. Обрезать строку по разделителю '_'  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Balbesco
Хотел таки в кои веки регуляркой воспользоваться
Just FYI: регулярки в разы медленнее INSTR/SUBSTR
6 июн 16, 11:36    [19261763]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить