2013-04-25 28 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

相關問題