2017-04-17 159 views
-1

我需要幫助tcl正則表達式。假設我有一個文件名作爲tcl腳本中的正則表達式

abc1_vv24_0.099B_0.00h_2ru.tar.gz 
abc1_vv24_0.099B_0.00h_2ru.gz 
  1. 我想單獨象下面這樣一個命令

    abc1 vv24 0.099B 0.00h 2ru tar.gz or gz 
    
  2. 我需要擴展在單個命令分隔爲兩個文件

    tar.gz or gz 
    
+0

Se [應該「給我一個X的正則表達式」問題關閉嗎?](http://meta.stackoverflow.com/questions/285733/should-give-me-a-regex-that-doesx -questions-be-closed/285739#285739) –

回答

0

對於第一個標準T優可以使用:

/[^_]+/g 

這將允許你分割字符串成子

Demo

而對於第2部分Demo

/(?:\.tar)?.\w+$/gm 

這是因爲有點棘手.099B_0.00h_2ru.gz是實際的分機

+0

在第一部分而不是2ru.tar.gz我想要2ru和.tar.gz分開第一個文件名和 2ru和.gz從第二個文件分開。 – Krishh

+0

非常感謝你:) – Krishh

+0

不客氣,很高興你批准我的答案:P –

0

第一步是使用split並將分割字符集設爲下劃線。然後,您可以使用一個簡單的regexp最後元件上提取擴展:

set filename "abc1_vv24_0.099B_0.00h_2ru.tar.gz" 

set pieces [split $filename "_"] 
regexp {([^.]*)\.(.*)} [lindex $pieces end] -> bit ext 
# Put the bit before the extension back in the list 
lset pieces end $bit 

puts $pieces 
puts $ext 

記住,在你的Tcl應該始終把正則表達式中的括號。它通過最小化反斜槓來阻止不需要的語法問題。

+0

非常感謝你:) – Krishh