我有一个看起来像这样的文件:
0 1.6e-10 4.47e-10 7.94e-10 0.082080 rad:12 zzz_yy_x2 name/123 A1=0
0 1.6e-10 0 7.94e-10 0.0 taa:12 yy_x2 name/540
然而,正则表达式似乎与前7列匹配
if {[regexp {\s+?(.*?)\s+?(.*?)\s+?(.*?)\s+?(.*?)\s+?(.*?)\s+?(.*?)\s+?(.*?)} $line -> i s l t a c l n]} {
echo $i $s $l $t $a $c $l $n
}
答案 0 :(得分:1)
这个怎么样?
lassign $line i s l t a c l n
假设你的字符串中没有奇怪的标点符号(花括号等),大多数期望列表参数的TCL函数也会使用以空格分隔的项目的字符串,并将其视为列表。 “lassign”函数接受列表中的每个项目并将其分配给变量。
另外,我不知道你是否打算重用“l”变量。我认为regexp和lassign都会将第三个项目存储在“l”中,并立即用列表中的第七项覆盖它。