Regex 使用替换文本中的模式替换正则表达式

Regex 使用替换文本中的模式替换正则表达式,regex,postgresql,replace,Regex,Postgresql,Replace,是否可以在替换文本中使用regex\u 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

是否可以在替换文本中使用
regex\u 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');

我意识到我的模式一开始就错了。。。(还在想办法)但在我继续之前,这可能吗?有人能告诉我怎么做吗?

你似乎在寻找捕获组

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
是从左到右的捕获组的编号,嵌套时子级在父级之前。

我可能过于简化了这一点,但您不能仅是否将“%”字符替换为“%”

如果您担心在末尾添加额外的空格,则始终可以将其更改为仅在“')后跟字符集时执行(例如,下面的“字符”一词):


我尝试了这个解决方案,它在REGEX101中工作,但不知何故Oracle并没有抓住这些变化。我不知道为什么,这是101的链接。
select regexp_replace ('Johnny Smith(D)Johnny Smith(D)', '\)', ') ', 'g')
select regexp_replace ('Johnny Smith(D)Johnny Smith(D)', '\)(\w)', ') \1', 'g')