2010-07-19 54 views
0

是否有方法用連字符和數字替換最後一位數字。正則表達式用連字符和數字替換最後一位數字

original   needs to be replaced with 
file01    file01-01 
file02    file02-02 

隨着AmarGhosh我解決了這個

with names as 
(
select '/file01/some/file01' name from dual 
union all 
select '/file02/another/file02' name from dual 
) 
select name,regexp_replace(name, '^/file0([1-9]+)','/file0\1-\1') new 

NAME      NEW 
------------------------- ------------------------- 
/file01/some/file01  /file01-1/some/file01 
/file02/another/file02 /file02-2/another/file02 

感謝 感謝

+1

查看我的更新。你希望它們是'file02-02'還是'file02-2';如果有'file123'會怎麼樣? – Amarghosh 2010-07-19 06:51:34

+0

沒有file123只是file01和file02 – Lisa 2010-07-19 07:05:01

+0

這是一個例子。你期望代碼做什麼?那麼'file12'或者'foo1234'呢?你的樣品有'/ file02-2'和'file02-02'。通常情況下,您希望代碼正確工作以獲得儘可能多的輸入。 – Kobi 2010-07-19 07:12:26

回答

3

/file0\1-\1/

更新替換^/file0([12])/:對於任何位數以下文件:

更換^/file([0-9]+)//file\1-\1/

更新-2:任意數量的/file-01

/file\1-\1

^更換/file([0-9]+)行,因此你的正則表達式不匹配第二file01的開頭匹配 - 先手擺脫它。

+0

雖然從例子中,我認爲parens應該圍繞0: file(0 [12]) – bluesmoon 2010-07-19 06:39:38

+0

對不起,我不得不改變我想第二行是/ file02/another/file02/file02的問題-2/another/file02 – Lisa 2010-07-19 06:41:40

+0

@bluesmoon yep,已更新。還改變了'$ 1'到'\ 1' – Amarghosh 2010-07-19 06:52:00