使用tcl匹配并从目录路径中提取多个单词

时间:2017-03-15 03:32:01

标签: tcl

尝试匹配目录路径中的某些单词并提取值,例如

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作为代码的下一行。 如果可以显示变化那就太好了。

2 个答案:

答案 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]+$}]