TCL 在列表中查找

TCL Find in list

我需要在列表中搜索确切的单词 CUT_LEVEL_EP1.5,但无法使用我的字符串前后的元素。
下面是我的列表:

set l {L1555(CUT_LEVEL_EP1.5-1) L1560(CUT_LEVEL_EP1.5-2) L1565(CUT_LEVEL_EP1.5) L1570(CUT_LEVEL_EP1.5-3)}

这是我尝试做的事情:

set index [lsearch -regexp $l {\yCUT_LEVEL_EP1.5\M}]

if {$index > -1} {
    puts [lindex $l $index]
}

结果不是我想要的L1555(CUT_LEVEL_EP1.5-1)
我想要这个L1565(CUT_LEVEL_EP1.5)

由于您的要求与 "word" 的内置定义不匹配,您不能使用 \M 约束转义。另一种方法是使用负前瞻:

lsearch -regexp $l {\yCUT_LEVEL_EP1.5(?![A-Z0-5.-])}

在我看来,您似乎只想查找包含完整圆括号内容的字符串。 (你还想避免 . 匹配除自身以外的东西的陷阱。)你可以很容易地做到这一点,但只需要一点技巧。

set str "CUT_LEVEL_EP1.5"
set index [lsearch -regexp $l ***=($str)]

***=表示RE的其余部分是字面量,然后我们直接把括号放上去(同时代入我们真正要找的字符串,因为force-literal是安全的把戏)。