1

当我使用 while 循环使用正则表达式匹配变量时,我希望匹配的变量通过使用 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”),其中引号内的值正在变化。该代码正在捕获这些值,但在附加后它没有创建列表。我需要所有的值作为一个列表。你能告诉我哪里出错了。

4

1 回答 1

1

一个$太多了。

换行

lappend $newlist $cell_name_matched

lappend newlist $cell_name_matched

否则你会在${}.

您还应该检查您的正则表达式是否找到了一些东西:

if {[regexp {cell \(\"(.*)\"} $line match cell_name_matched]} {
    puts "$cell_name_matched"   
    lappend newlist $cell_name_matched
}

unset 也可能会引发错误,不要理会它并删除它。

于 2013-07-09T22:49:32.690 回答