TCL如何删除文件路径的固定前缀和后缀以提取目标片段
TCL 路径提取目标片段实现方案
你当前的路径格式固定为AA/BB/CC/N*/DD/EE,可以通过以下三种常见方式提取N开头的目标片段:
方法1:正则匹配(灵活度最高)
直接通过正则捕获中间非斜杠的目标片段,适配前缀后缀内容有少量变化的场景:
# 示例路径 set path "AA/BB/CC/N2/DD/EE" # 正则捕获目标片段,([^/]+)匹配N开头的非斜杠段落 regexp {AA/BB/CC/([^/]+)/DD/EE} $path -> target # 输出结果为N2 puts $target
方法2:字符串裁剪(适合前后缀完全固定的场景)
如果前后缀内容、长度永远固定,直接通过字符串范围截取:
# 前缀AA/BB/CC/共9个字符,后缀/DD/EE共6个字符,截取中间部分 set target [string range $path 9 end-6]
方法3:路径拆分(最稳妥,适配层级固定场景)
用TCL内置的file split命令把路径拆分为层级列表,直接取对应索引的元素即可,只要路径层级不变,即使前后缀内容修改也不影响结果:
# 拆分后路径为列表 {AA BB CC N1 DD EE},目标片段位于索引3的位置 set target [lindex [file split $path] 3]
说明:你之前使用的
file tail命令作用是提取路径的最后一级片段,这里最后一级是EE,所以无法拿到中间的N开头片段。
内容的提问来源于stack exchange,提问作者tongtong
相关产品推荐
相关产品推荐

