Oracle – удаление конечных символов из строки с использованием регулярного выражения

Вопрос:

Я хотел бы удалить завершающие символы из строки, используя регулярное выражение Oracle.

Мои данные выглядят так:

TDC Supervisor #
TDC Supervisor ##
TDC Supervisor ###
Store Manager - 1
Store Manager - 2
Store Manager - 3
Stockroom Clerk Flexi 100 Hrs
Sales Consultant Flexi 120 Hrs
Service Desk Consultant (5 Day)
Secretary

Я хотел бы избавиться от завершающих # и - 1, но не 120 Hrs и 5 Day. Есть ли способ сделать это, используя регулярное выражение Oracle. Не уверен, следует ли использовать REGEXP_SUBSTR или REGEXP_REPLACE.

Поэтому в основном я хотел бы сделать отчет, который возвращает:

TDC Supervisor
Store Manager
Stockroom Clerk Flexi 100 Hrs
Sales Consultant Flexi 120 Hrs
Service Desk Consultant (5 Day)
Secretary

Лучший ответ:

Хэши в конце удаляются с #+$ (# для хэша, + для одного или более, $ для конца строки)

Числа удаляются с помощью - *\d+$ (- для минус, * для ноль или более пробелов, \d+ для одной или нескольких цифр.

Вы можете комбинировать оба с parens: (#+$)|(- *\d+$).

Ноль или больше пробелов удаляются с помощью * (или \s* чтобы поймать другие пробелы, такие как вкладки и т.д.), Поэтому окончательное регулярное выражение выглядит как \s*(#+$)|(-\s*\d+$).

CREATE TABLE mytable (mycolumn VARCHAR2(50));

INSERT INTO mytable VALUES ('TDC Supervisor #');
INSERT INTO mytable VALUES ('TDC Supervisor ##');
INSERT INTO mytable VALUES ('TDC Supervisor ###');
INSERT INTO mytable VALUES ('Store Manager - 1');
INSERT INTO mytable VALUES ('Store Manager - 2');
INSERT INTO mytable VALUES ('Store Manager - 3');
INSERT INTO mytable VALUES ('Stockroom Clerk Flexi 100 Hrs');
INSERT INTO mytable VALUES ('Sales Consultant Flexi 120 Hrs');
INSERT INTO mytable VALUES ('Service Desk Consultant (5 Day)');
INSERT INTO mytable VALUES ('Secretary');

select distinct regexp_replace(mycolumn,'\s*(#+$)|(-\s*\d+$)') 
  from mytable;

Service Desk Consultant (5 Day)
Store Manager
TDC Supervisor 
Secretary
Sales Consultant Flexi 120 Hrs
Stockroom Clerk Flexi 100 Hrs

Ответ №1

regexp_replace(string, '\s*(-\s*\d+|#+)$')
играть на скрипке

Оцените статью
TechArks.Ru
Добавить комментарий