TCL regsub 替换文件名中的最后一个/
TCL regsub replace last / in file name
要用 :
替换文件名中的最后一个 /
我尝试了以下代码。
set x a/b/c
regsub {.*(\/)\S+$} $x {:}
不希望的结果是 :
。
想要的结果是a/b:c
示例:
a -> a
a/b -> a:b
aa/b -> aa:b
aa/bb/.../dd/e -> aa/bb/.../dd:e
欢迎反馈。
用正则表达式,你可以说
set new [regsub {/([^/]+)$} $x {:}] ;# ==> a/b:c
foreach d {a a/b aa/b aa/bb/.../dd/e} {puts "$d => [regsub {/([^/]+)$} $d {:}]"}
# a => a
# a/b => a:b
# aa/b => aa:b
# aa/bb/.../dd/e => aa/bb/.../dd:e
或者,使用 file
command
set new [file dirname $x]:[file tail $x] ;# ==> a/b:c
第二个选项的问题是如果字符串不包含斜杠,你会得到 a
=> .:a
所以你需要做这样的事情:
foreach d {a a/b aa/b aa/bb/.../dd/e} {
set new [expr {[string first / $d] == -1 ? $d : "[file dirname $d]:[file tail $d]"}]
puts "$d -> $new"
}
要用 :
替换文件名中的最后一个 /
我尝试了以下代码。
set x a/b/c
regsub {.*(\/)\S+$} $x {:}
不希望的结果是 :
。
想要的结果是a/b:c
示例:
a -> a
a/b -> a:b
aa/b -> aa:b
aa/bb/.../dd/e -> aa/bb/.../dd:e
欢迎反馈。
用正则表达式,你可以说
set new [regsub {/([^/]+)$} $x {:}] ;# ==> a/b:c
foreach d {a a/b aa/b aa/bb/.../dd/e} {puts "$d => [regsub {/([^/]+)$} $d {:}]"}
# a => a
# a/b => a:b
# aa/b => aa:b
# aa/bb/.../dd/e => aa/bb/.../dd:e
或者,使用 file
command
set new [file dirname $x]:[file tail $x] ;# ==> a/b:c
第二个选项的问题是如果字符串不包含斜杠,你会得到 a
=> .:a
所以你需要做这样的事情:
foreach d {a a/b aa/b aa/bb/.../dd/e} {
set new [expr {[string first / $d] == -1 ? $d : "[file dirname $d]:[file tail $d]"}]
puts "$d -> $new"
}