удалить число и специальный символ с помощью owa_pattern

Использование owa_pattern.change в oracle 9i.

Можно ли удалить номер и специальный символ в конце (пожалуйста, обратите внимание только на последний) специальный символ в строке?

Я называю специальный символ символами, которые не являются ни словом, ни числом. например _, #, @, $ и т. д. ...

Например.

Строка = TEST_STRING_10

желаемый результат будет TEST_STRING (обратите внимание, что был удален только завершающий специальный символ _).

Я уже разобрался, как убрать номер, но застрял в части специального символа.

У меня пока есть этот код.

OWA_PATTERN.CHANGE (string, '\d', '', 'g');

Цените любой вклад.

Спасибо!


person user2058738    schedule 22.04.2014    source источник


Ответы (2)


Попробуйте следующее.

OWA_PATTERN.CHANGE (string, '[^a-zA-Z]+$', '');

Регулярное выражение

[^a-zA-Z]+    any character except: 'a' to 'z', 'A' to 'Z' 
              (1 or more times (matching the most amount possible))
 $            before an optional \n, and the end of the string
person hwnd    schedule 22.04.2014
comment
Спасибо за это. Если все в порядке, можете ли вы разобрать, что делает этот код? '[^ A-zA-Z] + $' - person user2058738; 22.04.2014
comment
похоже, вы отредактировали свой первый ответ, который действительно сработал. Это только убирает подчеркивание. :( - person user2058738; 22.04.2014
comment
классно! я нашел в Интернете лишь несколько документов относительно owa_pattern. Ваш ответ мне очень помог. Спасибо. - person user2058738; 22.04.2014
comment
Второй не работает, но первый делает всю работу за меня. - person user2058738; 22.04.2014

Это сделает это:

DECLARE
    result VARCHAR2(255);
BEGIN
    string := 'TEST_STRING_10';
    result := REGEXP_REPLACE(string, '([[:alnum:]_].*)_[[:digit:]]+', '\1', 1, 0, 'c');
END;
person Pedro Lobito    schedule 22.04.2014
comment
к сожалению, мы все еще находимся в версии 9i, и регулярное выражение недоступно. owa_pattern - самое близкое, что я могу найти. - person user2058738; 22.04.2014
comment
@ user2058738 Кажется, вы уже получили ответ, хорошо :) - person Pedro Lobito; 22.04.2014