2013-04-25 31 views
1

我有一个字符串,我需要在OF.OFF之前和之后的单词之间设置空格,但如果它的OFF在最后,它应该保持原样。谨慎纠正我的表达,或者如果有一个更好的写作方式。Regexp_replace在OF之前和之后的单词除外OFF

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' 

回答

1

这看起来像你想要的东西 - 如果有至少只需更换除f之外的of之后的1个字符:

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

酷!这很漂亮!!!是啊,它现在完美工作...它的处理多一个案件OFFTRACK ==> OFFTRACK..Wow好..超级!你们俩(BTOUEG)都是天才 – 2013-04-25 23:11:04

+0

嗯,它在regextester上对我不起作用,但不明白为什么 – 2013-04-25 23:17:02

+0

什么是regextester?还有我如何获得更多的专业知识..有一些工具来帮助或其纯粹的逻辑思维.. – 2013-04-25 23:20:07

1

以下正则表达式将在句子末尾或“任何地方”匹配“off”。

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

这种替代试图以确保如果单词由“的”结束你不添加一个尾随空格:

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

我有Oracle 11g R1.我不认为!是正则表达式的一部分 – 2013-04-25 22:39:55

+0

在Oracle SQL(或其他基于POSIX的正则表达式实现)中没有显示,我很害怕 – Aprillion 2013-04-25 22:40:54

+0

太坏了,让我们找到另一个解决方案,然后 – 2013-04-25 22:42:51

相关问题