我正在使用以下代码搜索特定数据并将其存储在变量中。
foreach searched $names {
[regexp {[cell]+} $searched match]
}
这里的名字是有很多数据的变量。我收到一条错误消息:Error: invalid command name "1.
我是 tcl 的新手,所以我不知道出了什么问题。我的代码是否正确,它会工作吗?谢谢
您的正则表达式首先评估并regexp {[cell]+} $searched match
返回1
,然后变为:
[1]
这是一个无效的命令。去掉方括号:
regexp {[cell]+} $searched match
现在,我认为您没有正确使用正则表达式。这将寻找任何组合c
,e
并且l
至少一次,这意味着它会接受cell
,lec
甚至c
单独。你可能想要:
regexp {((?:cell)+)} $searched match matched
这将匹配cell
,cellcell
等cellcellcell
并将其存储在变量中matched
。
括号用于捕获匹配组;这些(?: ...)
是针对非捕获组的。
编辑:根据我的评论,我会做类似的事情:
set newlist [list]
foreach searched $names {
regexp {cell\s*\("([^"]+)"\)} $searched match matched
lappend $newlist $matched
}
现在,列表 $newlist 包含所有匹配的值。你可以做一个 foreach 来显示所有这些;
foreach n $newlist {puts $n}
根据您的评论和杰瑞的回答,我想您需要
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