2016-12-29 59 views
0

我想用'&'替換所有'空格',排除'| 'in regexp_replaceOracle Regexp_replace

例如:'create |刪除帳戶' - > expect輸出爲'create |刪除&帳戶'。

餘米與SQL

select regexp_replace('create | delete account','\s [^\s\|\s]',' & ') from dual 

努力,但我爲在這裏做了什麼。任何人都可以請求幫助。

+0

如果您有一系列空格,您是否需要用'&'替換每個空格?另外,您的起始字符串中是否有'&'字符? – Aleksej

回答

3

我想這是你想要的東西:

select regexp_replace('create | delete account', '([^\|]) ([^\|])', '\1 & \2') 
from dual 

這裏的邏輯是在兩個非管道字符之間發生空間時進行替換。我使用圓括號捕獲這些字符,然後通過\1\2在替換中使用它們。

+1

對於超過3個空格的情況,使用'([^ \ |])\ s +([^ \ |])''。 +1雖然。 – GurV

+0

@GurwinderSingh感謝您的評論和讚揚:-) –

+0

@ Tim Biegeleisen - 謝謝..它解決了..我喜歡你看到的要求(即)'替換兩個非管道字符之間的空間' –

0

如果你需要用字符串' & '更換每一個空間,在你的出發字符串沒有'&',你可以避免正則表達式:

select replace (replace('create | delete account', ' ', ' & '), ' & | & ', ' | ') from dual