Regexp_replace在OF排除OFF之前和之后分隔单词

时间:2013-04-25 22:34:24

标签: sql regex oracle plsql

我有一个字符串,我需要在OF之前和之后设置单词之间的空格。但是如果它在结尾处关闭那么它应该保持原样。正确地纠正我的表达式或者是否有更好的写法。

PRINCEOFPERSIA ==> PRINCE OF PERSIA
PRINCOFFINLAND ==> PRINCE OF FINLAND
Blowoff ==> Blowoff
Spinoff ==> spinoff

I have written this exp.
Select REGEXP_REPLACE(spinoff,'(\w*)(off?)(.*)$','\1 \2 \3') from dual;
but it breaks it as 'spin off'

2 个答案:

答案 0 :(得分:1)

以下正则表达式将匹配" off"在句末,或者#34;"任何地方。

Select REGEXP_REPLACE(spinoff,'(off$)|(of)','\1 \2 ') form dual;

此替代方案会尝试确保如果单词以"结束,则不会添加尾随空格:

Select REGEXP_REPLACE(spinoff,'(off$)|(of)([^$])','\1 \2 \3') form dual;

答案 1 :(得分:1)

这看起来像你想要的 - 只有在of以外的f之后至少有一个字符才能替换:

 REGEXP_REPLACE(spinoff, '(\w+)(of)(f*[^f].*)$', '\1 \2 \3')