regex_replace с использованием шаблона в тексте замены - PullRequest
0 голосов
/ 12 января 2019

Можно ли использовать шаблон в regex_replace в тексте замены? Я пытаюсь вставить пробел между именами.

Например, с Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D) я пытаюсь получить вывод Johnny Smith Sarah Suzanne(D) Johnny Smith Sarah Suzanne(D)

Я пробовал что-то вроде этого:

SELECT 
    'Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D)'
    , regexp_replace('Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D)', '[a-z)][A-Z]',' ', 'g');

Я понимаю, что мой шаблон неправильный с самого начала ... (все еще пытаюсь понять это), но прежде чем я продолжу, возможно ли это вообще? Кто-нибудь может дать мне руководство, как это сделать?

Ответы [ 2 ]

0 голосов
/ 12 января 2019

Возможно, я слишком упрощаю это, но вы не можете просто заменить символ ')' на ')'?

select regexp_replace ('Johnny Smith(D)Johnny Smith(D)', '\)', ') ', 'g')

Если вас беспокоит добавление дополнительного пробела в конце, вы всегда можете изменить его, чтобы сделать это только тогда, когда за символом ')' следует набор символов (пример под символом слова):

select regexp_replace ('Johnny Smith(D)Johnny Smith(D)', '\)(\w)', ') \1', 'g')
0 голосов
/ 12 января 2019

Вы, кажется, ищете группы захвата.

SELECT 'Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D)',
        regexp_replace('Johnny SmithSarah Suzanne(D)Johnny SmithSarah Suzanne(D)', '([a-z)])([A-Z])','\1 \2', 'g')

Если вы заключите части в шаблоне в круглые скобки (без специальных символов непосредственно после (, которые изменяют значение группы), строка, соответствующая этой части шаблона, будет захвачена. С помощью '\' вы можете ссылаться на эти захваченные строки в выражении замены, и соответствующая строка будет помещена туда. n - номер группы захвата слева направо, дочерний перед родителем при вложении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...