当我使用while循环使用regexp匹配变量时,我希望匹配变量通过使用lappend形成一个列表。代码是
set file_name [open filename.txt r]
set newlist [list]
while {[gets $file_name line] >= 0} {
regexp {cell \(\"(.*)\"} $line match cell_name
if {[info exists cell_name] && $cell_name != ""} {
puts "$cell_name"
lappend $newlist $cell_name
unset cell_name
}
}
foreach item $newlist {puts $item}
close $file_name
它匹配的文本就像单元格(“aabbcc”),其中引号内的值正在变化。此代码将捕获这些值,但在追加后不会创建列表。我需要所有的值作为列表。你能不能告诉我哪里出错了。
答案 0 :(得分:1)
$
太多了。
更改行
lappend $newlist $cell_name_matched
到
lappend newlist $cell_name_matched
否则,您会在${}
中找到结果。
您还应该检查regexp是否找到了某些内容:
if {[regexp {cell \(\"(.*)\"} $line match cell_name_matched]} {
puts "$cell_name_matched"
lappend newlist $cell_name_matched
}
未设置也可能会抛出错误,不管它并将其删除。