hierarchy_names = a/b/c a x d/e f/g h/i/j/k l/m/n o/p我正试图从具有多级hierarchy_names的列表中过滤掉2 level、hierarchy_names、d/e、f/g和o/p。
我尝试了lsearch,但问题是,它返回的匹配具有大于或等于2 ie a/b/c d/e f/g h/i/j/k l/m/n o/p的层次级别,但不完全等于2 ie d/e f/g <代码>d15,这是由于它的contains模式返回元素的算法。我也尝试过regexp,但它的问题是,它返回2级hierarchy_names以及在更高级别的hierarchy_names中存在的部分2级层次结构,即a/b d/e f/g h/I j/k l/m
set hier {a/b/c a x d/e f/g h/i/j/k l/m/n}
puts [lsearch -all -inline -regexp $hier {\w+/\w+}]
puts [regexp -all -inline {\w+/\w+} $hier]d/e f/g o/p
发布于 2019-06-26 18:11:54
在这种情况下,线锚可能会对您有所帮助。
% lsearch -all -inline -regexp $hier {^\w+/\w+$}
d/e f/g发布于 2019-06-26 20:38:17
我会在Tcl的工具库中使用一个不同的工具(假设您有Tcl 8.6)。
set hierarchy_names {a/b/c a x d/e f/g h/i/j/k l/m/n o/p}
set filtered [lmap n $hierarchy_names {
if {[llength [file split $n]] != 2} continue
string cat $n
}]
puts $filtered
# d/e f/g o/p这将使用lmap将一个简短的脚本应用于列表的每个元素。列表的结果要么是continue信号(跳过元素),要么是元素;测试是通过查看file split的输出列表的长度来完成的。
发布于 2019-06-27 06:27:28
如何处理regexp?
你可以像这样设计一个正则表达式:
(?:\s+|^)(\w+/\w+)(?=\s+|$)这将返回一个偶数匹配列表,在奇数位置有一个子匹配。要过滤掉它们,您可以使用[dict values]或显式[foreach],例如..
dict values [regexp -all -inline -- {(?:\s+|^)(\w+/\w+)(?=\s+|$)} $hier]https://stackoverflow.com/questions/56770147
复制相似问题