我是Tcl的新手。我有一个这样的列表:
set list1 {
dir1
fil.txt
dir2
file.xls
arun
baskar.tcl
perl.pl
}
从该列表中,我只需要像这样的元素:
dir1
dir2
阿伦
我尝试过regexp
和lsearch
,但是没有运气。
方法1:
set idx [lsearch $mylist "."]
set mylist [lreplace $mylist $idx $idx]
方法2:
set b [regsub -all -line {\.} $mylist "" lines]
答案 0 :(得分:1)
lsearch命令有很多选项,其中一些选项可以使此任务变得很容易:
lsearch -all -inline -not $list1 *.*
答案 1 :(得分:1)
如果方法正确,方法1将会起作用。 lsearch
默认返回单个结果,并且搜索条件接受全局模式。使用.
只会查找等于.
的元素。然后,您需要为lreplace
循环:
set idx [lsearch -all $list1 "*.*"]
foreach id [lsort -decreasing $idx] {
set list1 [lreplace $list1 $id $id]
}
降序排序很重要,因为删除元素时元素的索引会改变(还要注意,您在代码段中使用了错误的变量名)。
如果使用正确的正则表达式,方法2也将起作用:
set b [regsub -all -line {.*\..*} $list1 ""]
但是在那种情况下,您可能想要调整结果。 .*
将匹配换行符以外的任何字符。
我可能会像这样使用lsearch
,这样就无需替换:
set mylist [lsearch -all -inline -not $list1 "*.*"]
答案 2 :(得分:1)
或者,使用Image
(或使用error: The argument type 'Image (C:\flutter\bin\cache\pkg\sky_engine\lib\ui\painting.dart)' can't be assigned to the parameter type 'Image (C:\flutter\packages\flutter\lib\src\widgets\image.dart)'. (argument_type_not_assignable at [ranky] lib\event_selection.dart:53)
的显式循环)为不可接受的元素过滤列表:
lmap
另请参阅有关过滤列表的相关讨论,例如Using `lmap` to filter list of strings