1

我正在使用以下代码搜索特定数据并将其存储在变量中。

foreach searched $names {
  [regexp {[cell]+} $searched match]
}

这里的名字是有很多数据的变量。我收到一条错误消息:Error: invalid command name "1.我是 tcl 的新手,所以我不知道出了什么问题。我的代码是否正确,它会工作吗?谢谢

4

2 回答 2

4

您的正则表达式首先评估并regexp {[cell]+} $searched match返回1,然后变为:

[1]

这是一个无效的命令。去掉方括号:

regexp {[cell]+} $searched match

现在,我认为您没有正确使用正则表达式。这将寻找任何组合ce并且l至少一次,这意味着它会接受celllec甚至c单独。你可能想要:

regexp {((?:cell)+)} $searched match matched

这将匹配cell,cellcellcellcellcell并将其存储在变量中matched

括号用于捕获匹配组;这些(?: ...)是针对非捕获组的。

编辑:根据我的评论,我会做类似的事情:

set newlist [list]

foreach searched $names {
  regexp {cell\s*\("([^"]+)"\)} $searched match matched
  lappend $newlist $matched
}

现在,列表 $newlist 包含所有匹配的值。你可以做一个 foreach 来显示所有这些;

foreach n $newlist {puts $n}
于 2013-07-02T20:17:12.557 回答
1

根据您的评论和杰瑞的回答,我想您需要

regexp -- {(?:cell)\s+?(\("\w+"\))} $searched -> matched_part_in_brakets
puts $matched_part_in_brakets

或者

regexp -- {(?:cell)\s+?(\("\w+"\))} $searched match matched_part_in_brakets
puts $matched_part_in_brakets
于 2013-07-03T06:10:36.467 回答