2011-11-02 20 views

回答

1

一個非常靜態的方式將

txt = 'IPCM_20111012151700_00001.tar.gz' 
num = txt[-12..-8] 

更多動態

txt[txt.lastIndexOf('_')+1..txt.indexOf('.')-1] 

@Steven:這是你的解決方案,但工作

raw = 'IPCM_20111012151700_00001.tar.gz' 
num = (raw =~ /IPCM_[0-9]+_([0-9]+).tar.gz/) 
print num[0][1] 
+0

+1的正則表達式:-) –

-1

我沒有對我有Groovy編譯,但請嘗試:

def seqNum = (raw ~= /IPCM_[0-9+]_([0-9+]).tar.gz/)[0] 

它可能有點不對,但你應該得到的主意。 (使用正則表達式匹配)

+0

在http://groovyconsole.appspot.com/運行腳本(該「便攜式」groovy編譯器)陳述意外的令牌:〜@第2行第12列。 print(raw〜= /IPCM_[0-9+]_([0-9+]).tar.gz/)[0 ] '所以,這有點不對。你的正則表達式也是錯誤的。 – micfra

+0

噢,好吧,我猜測我沒有那麼棒的代碼和正則表達式,沒有正確的工具可用。我的觀點是使用正則表達式來匹配值而不是範圍。 *編輯:哇,我只在錯誤的一方有+。 – Steven

+0

你的提示戰爭正確,但有幾個錯誤:錯誤的代碼,錯誤的正則表達式,錯誤的索引訪問結果。這可能會讓提問者誤入歧途,進入更多的研究來解決他的問題。不應該成爲SO的答案。 – micfra

0

這個怎麼樣?

raw = 'IPCM_20111012151700_00001.tar.gz' 
seq = raw.tokenize('_').last()-'.tar.gz' 

或者,如果你有一個隨機的文件擴展名:

​raw = 'IPCM_20111012151700_00011.tar.gz' 
seq = raw.tokenize('_').last().tokenize('.').first()