如何在模式tcl之后使用regsub来获取值?

时间:2016-05-20 02:53:16

标签: tcl

如果我的变量具有这样的值:

set var "/abc/def/ghi/jkl/mno/pqr"

如何使用regsub以便删除除第二个最后一个值“mno”以外的所有内容?

4 个答案:

答案 0 :(得分:1)

为什么要正则表达式? 怎么样:

set val [file tail [file dirname $var]]

参考文献:file

答案 1 :(得分:1)

% regexp {.*/([^/]+)/} $var -> val
1
% set val
mno

答案 2 :(得分:1)

尝试使用splitlindex

% set var "/abc/def/ghi/jkl/mno/pqr"
/abc/def/ghi/jkl/mno/pqr
% 
% puts "[lindex [split $var "/"] end-1]"
mno

答案 3 :(得分:1)

嗯,你可以这样做:

set updatedValue [regsub {^.*(mno).*$} $value {\1}]

这是来自Unix实用程序的旧技巧,sed,翻译成Tcl。这将删除除最后一个匹配mno的文本之外的所有内容。适当选择你的RE。

请不要使用它来操作文件名。它可能会起作用,但它会使您的代码更加混乱。 file命令具有用于此类工作的实用程序子命令,它们可以处理您可能不知道的棘手问题。