尝试匹配目录路径中的某些单词并提取值,例如
C:\working\Ever7\FILE\
我需要从路径中提取Ever7
并且效果很好
set seq $name
set aa [split $seq \\]
set bb [lsearch -inline $aa Ev*]
set seq_number $bb
现在我的问题是Ever7
它变了,意味着它将是其他词,有Ever7, Mak, Inge, DM, FP, Lin
如何添加或更改上面的表达式以使其匹配Ever7 or Mak or Inge or DM or FP or Lin
,如果匹配这些单词,它将设置为seq_number作为代码的下一行。
如果可以显示变化那就太好了。
答案 0 :(得分:0)
假设可以在某个位置可靠地找到您感兴趣的路径段,则可能要使用Tcl的功能对文件系统路径进行内省:
set fp "/working/Ever7/FILE"
set needles [list Ever7 Mak Inge DM FP Lin]
if {[lindex [file split $fp] 2] in $needles} {
incr seq_number
}
否则,没有任何保证,只需在[string match]
针上运行一个循环:
foreach needle $needles {
if {[string match *$needle* $fp]} {
incr seq_number
break;
}
}
这不需要您将干草堆转换成Tcl列表。
答案 1 :(得分:-1)
我找到了答案,通过更改set bb上的代码行
set bb [lsearch -inline -regexp $mach {^[DM|Ever7|Inge|FP|Lin|Mak]+$}]