我需要tcl regexp的帮助。假设我的文件名为
abc1_vv24_0.099B_0.00h_2ru.tar.gz
abc1_vv24_0.099B_0.00h_2ru.gz
我想在
的单一命令中分开如下abc1 vv24 0.099B 0.00h 2ru tar.gz or gz
我需要在单个命令中为两个文件单独添加扩展
tar.gz or gz
答案 0 :(得分:0)
对于第一部分,您可以使用:
/[^_]+/g
这将允许您将字符串拆分为子字符串
第2部分Demo:
/(?:\.tar)?.\w+$/gm
由于.099B_0.00h_2ru.gz
是实际的扩展名
答案 1 :(得分: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中,您应该始终将正则表达式放在大括号中。它可以在最少使用反斜杠的情况下阻止不必要的语法问题。