Неверный номер возвращается Regexp_replace - PullRequest
0 голосов
/ 10 июня 2019

Я хочу удалить названия, например, Dr., Mr. Jr. из названия. Regexp_replace Если поиск и удаление Dr. Mr. Jr и поиск должны выполняться без учета регистра, в конечном выводе не должно быть . или , или лишних пробелов в имени.

select regexp_replace('DR. Mr. Mr Dr Radha Jr Jr. Krishnan Jr.','(Dr|Mr|Jr)(\W|\w|$|,)',1,0,'i') 
from dual

Я получаю сообщение об ошибке неверного номера.

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

Следующий запрос удалит несколько пустых пробелов и также обрезает начальные пробелы:

SELECT TRIM(REGEXP_REPLACE(
         REGEXP_REPLACE('DR. Mr. Mr Dr Radha Jr Jr. Krishnan Jr.', '(Dr|Mr|Jr)(\W|\w|$|,)', '', 1, 0, 'i')
       , ' {2,}', ' ')) AS "Result"
FROM Dual

Возвращает результат как Radha Krishnan

Демонстрация на дб <> скрипка

0 голосов
/ 10 июня 2019

Вашему решению не хватает двух аспектов.

Более важно то, что вы можете вырезать из ведущих "заголовков" из имен:

select regexp_replace('DR. Mr. Mr Dr Dradha Jr Jr. Mrishnan Jr.','(Dr|Mr|Jr)(\W|\w|$|,)','',1,0,'i') 
from dual

, что возвращает непредвиденный результат

dha  shnan 

Средство защиты состоит в том, чтобы разрешить только несловные символы (\W) и конец строки ($) после заголовка .

Если вы введете необязательный пробел или начальную строку (^) перед заголовком , вы избавитесь от второй проблемы - пробелов, оставшихся после удаления заголовков

select regexp_replace('DR. Mr. Mr Dr Dradha Jr Jr. Mr, Mrishnan Jr.',
  '( *|^)(Dr|Mr|Jr)(\W|$)','',1,0,'i') 
from dual

Dradha Mrishnan  
0 голосов
/ 10 июня 2019

Вы забыли, что заменить на шаблон и 1

select regexp_replace('DR. Mr. Mr Dr Radha Jr Jr. Krishnan Jr.','(Dr|Mr|Jr)(\W|\w|$|,)','',1,0,'i') 
from dual
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...