如何使用的foreach使用正则表达式(How to use foreach for using r

2019-10-18 07:52发布

我使用下面的代码来搜索特定的数据,并将其存储在一个变量。

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

这里的名字是有很多数据的变量。 我收到一条错误消息: Error: invalid command name "1.我是新来的TCL,所以我不能弄清楚什么是错是我的代码是正确的,将它的工作谢谢

Answer 1:

您的正则表达式正在评估第一和regexp {[cell]+} $searched match返回1 ,其然后变成:

[1]

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

regexp {[cell]+} $searched match

现在,我不认为你正确地使用正则表达式。 这将寻找任何组合的cel至少一次,这意味着它会接受celllec甚至c孤单。 你可能想:

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

这将匹配cellcellcellcellcellcell等,并将其存储在变量matched

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

编辑:按照我的意见,我会做这样的事情:

set newlist [list]

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

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

foreach n $newlist {puts $n}


Answer 2:

基于您的评论和杰里的回答,我想你需要

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


文章来源: How to use foreach for using regexp