如何从tcl中的字符串中剪切子字符串

时间:2013-04-10 10:48:42

标签: tcl

我有NYMEX UTBPI之类的字符串。在这里,我想获取NYMEX和UTBPI中间的空白索引,然后从该索引到最后一个索引我想要剪切子字符串。在这种情况下,我的子字符串将是UTBPI 我在下面使用

set part1 [substr $line [string index  $line " "] [string index  $line end-1]]

我遇到了错误。

wrong # args: should be "string index string charIndex"
    while executing
"string index  $line  "
    ("foreach" body line 2)
    invoked from within
"foreach line $pollerName {
set part1 [substr $line [string index  $line  ] [string index  $line end-1]]
puts $part1
puts $line
}"
    (file "Config.tcl" line 9)

你能告诉我如何做其他字符串操作的想法。任何良好的链接。

3 个答案:

答案 0 :(得分:7)

我只会使用string range并将空格的索引传递给它(您可以使用字符串优先或其他任何内容找到)。

% set s "NYMEX UTBPI"
NYMEX UTBPI
% string range $s 6 end
UTBPI

或者先使用字符串动态查找空格:

% set output [string range $s [expr {[string first " " $s] + 1}] end]
UTBPI

答案 1 :(得分:5)

如果处理器时间不是问题,请将其拆分为列表并取第二个元素:

set part1 [lindex [split $line] 1]

如果字符串可以有任意数量的单词,

set new [join [lrange [split $line] 1 end]]

但是,我会使用Donal的建议并坚持string操作。

答案 2 :(得分:1)

我认为,在Tcl中做到这一点的最好方法是:

set s "NYMEX UTBPI"
regexp -indices " " $s index;
puts [lindex $index 0]

变量索引将包含匹配模式的第一个和最后一个索引。在这里,当你正在寻找单个字符时,第一个和最后一个将是相同的,所以你可以使用

puts [lindex $index 0]

puts [lindex $index 1]

有关详细信息,请参阅官方文档:http://www.tcl.tk/man/tcl8.5/TclCmd/regexp.htm#M7