是否可以在替换文本的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');
我意识到我的模式从...开始是错误的(仍然试图弄清楚),但是在我继续之前,它甚至可能吗?有人可以指导我如何做吗?
答案 0 :(得分:1)
您似乎正在寻找捕获组。
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
是捕获组的编号,从左到右,嵌套时子级在父级之前。
答案 1 :(得分:0)
我可能对此进行了简化,但是您不能仅将')'字符替换为')'吗?
select regexp_replace ('Johnny Smith(D)Johnny Smith(D)', '\)', ') ', 'g')
如果您担心在末尾添加多余的空格,可以随时将其更改为仅在')'后跟一个字符集(例如字字符下方)时使用:
select regexp_replace ('Johnny Smith(D)Johnny Smith(D)', '\)(\w)', ') \1', 'g')