2017-04-17 179 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