tcl脚本中的regexp
我需要tcl regexp的帮助。假设我有一个文件名为tcl脚本中的regexp,regex,tcl,Regex,Tcl,我需要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 对于第一部分,您可以使用: /[^_]+/g 这将允许您将字符串拆分为子字符串 第二部分: 这有点棘手,因为.099B
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
对于第一部分,您可以使用:
/[^_]+/g
这将允许您将字符串拆分为子字符串
第二部分:
这有点棘手,因为
.099B_0.00h_2ru.gz
是实际的扩展名第一步是使用拆分
,拆分字符设置为下划线。然后,您可以在最后一个元素上使用简单的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中,您应该始终将正则表达式放在大括号中。它使用最少的反斜杠来停止不必要的语法问题 在第一部分中,Se而不是2ru.tar.gz,我希望第一个文件名中的2ru和.tar.gz分开,第二个文件名中的2ru和.gz分开。正则表达式不使用Tcl语法。
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