使用lsearch查找分号字符

时间:2018-07-27 10:31:40

标签: tcl

我有一个像这样的列表:

puts $macro_info($macro,pins,$pin)
VDD { POLYGON -17.4000 233.0160 -42.0000 257.6160} { -42.0000 292.4160 -17.4000 317.0160} { 17.4000 317.0160 42.0000 292.4160} { 42.0000 257.6160 17.4000 233.0160 ;} { POLYGON 132.6000 233.0160 108.0000 257.6160} { 108.0000 292.4160 132.6000 317.0160} { 167.4000 317.0160 192.0000 292.4160} { 192.0000 257.6160 167.4000 233.0160 ;} { POLYGON 282.6000 233.0160 258.0000 257.6160} { 258.0000 292.4160 282.6000 317.0160} { 317.4000 317.0160 342.0000 292.4160} { 342.0000 257.6160 317.4000 233.0160 ;} { POLYGON 432.6000 233.0160 408.0000 257.6160} { 408.0000 292.4160 432.6000 317.0160} { 467.4000 317.0160 492.0000 292.4160} { 492.0000 257.6160 467.4000 233.0160 ;} { POLYGON 582.6000 233.0160 558.0000 257.6160} { 558.0000 292.4160 582.6000 317.0160} { 617.4000 317.0160 642.0000 292.4160} { 642.0000 257.6160 617.4000 233.0160 ;} { POLYGON 732.6000 233.0160 708.0000 257.6160} { 708.0000 292.4160 732.6000 317.0160} { 767.4000 317.0160 792.0000 292.4160} { 792.0000 257.6160 767.4000 233.0160 ;} { POLYGON 882.6000 233.0160 858.0000 257.6160} { 858.0000 292.4160 882.6000 317.0160} { 917.4000 317.0160 942.0000 292.4160} { 942.0000 257.6160 917.4000 233.0160 ;}

并且我想用分号字符搜索条目的列表索引。

例如lsearch -index 0 -all $macro_info($macro,pins,$pin) POLYGON给了我

  

1 5 9 13 17 21 25

但是lsearch -index 0 -regexp -all $macro_info($macro,pins,$pin) [;]让我

  

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28

所以实际上我需要一些转义或其他操作。但是我尝试了各种事情。不起作用:

lsearch -index 0 -regexp -all $macro_info($macro,pins,$pin) {;}
lsearch -index 0 -regexp -all $macro_info($macro,pins,$pin) [;]
lsearch -index 0 -regexp -all $macro_info($macro,pins,$pin) ";"

这是什么问题?

2 个答案:

答案 0 :(得分:1)

您可能想要

lsearch -all $macro_info($macro,pins,$pin) "*;*"

这是一个glob /文本匹配搜索,用于在列表中某个项目的任何地方分号。

如果只希望将分号作为最后一个元素的项目(与示例数据中所有带有分号的项目相同),则可以指定它:

lsearch -all -index end $macro_info($macro,pins,$pin) ";"

由于它是命令行中的命令分隔符,因此您仍然需要转义分号(如";"{;}\;)。

您的尝试失败有两个原因。一方面,您正在寻找每个项目的第一个元素,而所有分号是最后一个元素。另外,[;]的值是一个空字符串(将搜索模式设置为-regexp仅影响命令在内部处理参数的方式,而不影响在命令行中如何解释参数)。

答案 1 :(得分:0)

在示例输入中,分号始终是子列表的最后一个元素。在这种特殊情况下,您可以使用:

lsearch -all -index end $macro_info($macro,pins,$pin) {;}